現有環境說明
內網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 root@192.168.0.198:/etc/kubernetes/pki/
scp ca.crt ca.key sa.key sa.pub front-proxy-ca.crt front-proxy-ca.key root@192.168.0.194:/etc/kubernetes/pki/
cd /etc/kubernetes/pki/etcd
scp ca.crt ca.key root@192.168.0.198:/etc/kubernetes/pki/etcd/
scp ca.crt ca.key root@192.168.0.194:/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加入集群即可

