记一次阿里云上安装K8S集群 kubeadm安装高可用过程

现有环境说明

内网slb:192.168.0.203

服务器三台:master1 = 192.168.0.195            master2 = 192.168.0.198              master3 = 192.168.0.194

三台master都安装基本环境 

修改三个服务器上的hosts

添加  vim /etc/hosts

192.168.0.195   master1

192.168.0.198   master2

192.168.0.194   master3

192.168.0.195   apisv (这个会成为)

然后还借用了别人的一个初始化脚本

wget https://kuboard.cn/install-script/v1.17.2/init_master.sh

开始安装docker

yum install -y yum-utils \

device-mapper-persistent-data \

lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io

systemctl enable docker

systemctl start docker

安装nfs

yum install -y nfs-utils

# 关闭 SeLinux

setenforce 0

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 关闭 swap

swapoff -a

yes | cp /etc/fstab /etc/fstab_bak

cat /etc/fstab_bak |grep -v swap > /etc/fstab

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf

echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf

echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf

echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf

echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf

echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf

sysctl -p 

配置K8S源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

yum install -y kubelet-1.17.2 kubeadm-1.17.2 kubectl-1.17.2

systemctl daemon-reload

systemctl restart docker

systemctl enable kubelet && systemctl start kubelet

以master1为第一个初始化服务器

设置几个环境变量

export APISERVER_NAME=apisv(自己取名,要添加进hosts的)

export POD_SUBNET=10.100.0.1/16

以上两个是下面执行的脚本需要用的

修改init_master.sh

主要修改   kubernetesVersion: v1.17.2  (你需要安装的版本)

并运行

sh init_master.sh

等待初始化完成,并记录kubeadm join  XX:6443  XXXX  --discovery-token-ca-cert-hash XXX   --control-plane --certificate-key   (这是让其他master加入集群的命令)

这个后面跟着一个kubeadm join 是node加入集群的命令

最后  开始最重要的高可用操作方式了(一开始自己单纯用apisc指向内网slb,然后slb监听后端三个master。发现因为证书不对,只能访问到master1这个服务器)

现在开始第一步:检查master1的hosts

192.168.0.195   master1

192.168.0.198   master2

192.168.0.194   master3

192.168.0.195   apisc  (这个一开始要指向自己,就是master1)

第二步:为matser2 和master3创建证书存放文件夹(去master2,master3上创建这两个文件夹)

/etc/kubernetes/pki

/etc/kubernetes/pki/etcd

第三步:分发证书

在master1上  cd /etc/kubernetes/pki

scp ca.crt ca.key sa.key sa.pub front-proxy-ca.crt front-proxy-ca.key :/etc/kubernetes/pki/

scp ca.crt ca.key sa.key sa.pub front-proxy-ca.crt front-proxy-ca.key :/etc/kubernetes/pki/

cd /etc/kubernetes/pki/etcd

scp ca.crt ca.key :/etc/kubernetes/pki/etcd/

scp ca.crt ca.key :/etc/kubernetes/pki/etcd/

第四步:master2,master3加入集群

分别在master2,master3执行上面master1初始化时保存的kubeadm join命令

master2  master3都要执行

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

最后修改master2  master3的/etc/hosts,把各自内网ip解析到apisc

master3:192.168.0.194   apisc

master2:192.168.0.198   apisc

验证:

分别在三个master上执行

kubectl get node

都能看到三个master服务器的集群状态

到这里  K8S的在阿里云上的高可用集群已经搭建完成了  

内网slb还是要配置到监控这三个master的6443端口

至于node怎么加入集群

node上首先搭建基本环境docker+kubectl等等

然后修改hosts

192.168.0.195   master1

192.168.0.198   master2

192.168.0.194   master3

192.168.0.203   apisc   (node上的apisc都必须指向内网的slb)

然后执行kubeadm join加入集群即可

记一次阿里云上安装K8S集群 kubeadm安装高可用过程