带你玩转kubernetes-k8s(第28篇:k8s-kubeadm1.4.0安装 k8s高可用)
今天我们来使用kubeadm 安装高可用k8s。系统:Centos7角色规划如下:hostnameiprolek8s-master120.0.40.51masterk8s-master220.0.40.52masterk8s-master320.0....
今天我们来使用kubeadm 安装高可用k8s。
系统:Centos7
角色规划如下:
hostname | ip | role |
---|---|---|
k8s-master1 | 20.0.40.51 | master |
k8s-master2 | 20.0.40.52 | master |
k8s-master3 | 20.0.40.53 | master |
k8s-node1 | 20.0.40.54 | node |
k8s-node2 | 20.0.40.55 | node |
k8s-node3 | 20.0.40.56 | node |
在下面的部署过程中需要使用SCP进行传输,所以还需要操作机具备SSH到所有节点的连接能力。为了保证高可用性,Maste服务器至少需要有三台;外置etcd的方案则需要有三台以上的etcd服务器。
我们现在来配置堆叠etcd方式的高可用k8s集群:
一、准备工作:(所有节点执行)
1.关闭selinux。
2.关闭防火墙。
3.配置hosts,修改hostname
4.时间同步
yum -y install ntp
ntptime
timedatectl
systemctl enable ntpd
systemctl restart ntpd.service
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5.配置免密登录
二、 安装Docker(所有节点执行)
1.安装yum管理工具及其依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2.添加yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装docker-ce18
yum -y install docker-ce-18.09.6
4.配置镜像加速器(ps镜像加速器很多,可以自己查找)
echo '{"registry-mirrors":["https://registry.docker-cn.com"]}' > /etc/docker/daemon.json
5.启动docker
systemctl start docker && systemctl enable docker
三 kubeadm 准备环境(所有节点执行)
1.添加阿里源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2.关闭swap
swapoff -a
3.安装并启动kubelet
yum install -y kubelet-1.14.0 kubeadm-1.14.0 kubectl-1.14.0 --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
4.更改swap限制
# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--fail-swap-on=false
5.编辑文件/usr/lib/systemd/system/docker.service(这个步骤可做,可不做。)
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd
systemctl daemon-reload
systemctl restart docker
四、在k8s-master1节点上准备镜像,配置HAproxy
1.拉取etcd,kube-apiserver,kube-proxy,kube-controller-manger,kube-sheduler镜像(在k8s-master1上执行)
# cat init-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
imageRepository: docker.io/dustise
kubernetesVersion: v1.14.0
# kubeadm config images pull --config=init-config.yaml
[config/images] Pulled docker.io/dustise/kube-apiserver:v1.14.0
[config/images] Pulled docker.io/dustise/kube-controller-manager:v1.14.0
[config/images] Pulled docker.io/dustise/kube-scheduler:v1.14.0
[config/images] Pulled docker.io/dustise/kube-proxy:v1.14.0
[config/images] Pulled docker.io/dustise/pause:3.1
[config/images] Pulled docker.io/dustise/etcd:3.3.10
[config/images] Pulled docker.io/dustise/coredns:1.3.1
2.配置haproxy(为三台kube-apiserver实现负载均衡,ps:所有节点安装并配置)
yum install -y haproxy
[root@k8s-master1 ~]# cat /etc/haproxy/haproxy.cfg
listen stats 0.0.0.0:12345
mode http
log global
maxconn 10
stats enable
stats hide-version
stats refresh 30s
stats show-node
stats auth admin:p@sswOrd
stats uri /stats
frontend kube-api-https
bind 0.0.0.0:12567
mode tcp
default_backend kube-api-server
backend kube-api-server
balance roundrobin
server k8s-master1 20.0.40.51:6443 check
server k8s-master2 20.0.40.52:6443 check
server k8s-master3 20.0.40.53:6443 check
systemctl enable haproxy && systemctl start haproxy
在页面查看,验证(ps:需要输入用户名与密码 自己看配置文件蛤)
五、Kubeadm的安装
1.准备配置文件(k8s-master1上执行)
[root@k8s-master1 ~]# cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
imageRepository: docker.io/dustise
kubernetesVersion: v1.14.0
kubernetesVersion: stable
controlPlaneEndpoint: "20.0.40.51:12567"
2.进行初始化
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs
3.启用网络
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
4.加入其他节点的master(ps:初始化之后,会出现两条token,第一条token是加入master的,第二条为node的加入)
5.加入node节点
6.验证master(ps:不要在意我的版本,我是懒了一丢丢,没有把版本调成统一而已)
至此:我们的高可用k8s就搭建完成了
下面简单描述一下整体过程:
etcd的安装有两种方式,我们上述采用的是第一种堆叠方式:etcd服务和控制平面被部署在同样的节点中,对基础设施的要求较低,对故障的应对能力也较低。
外置etcd方案:etcd和控制平面被分离,需要更多的硬件,也有更好的保障能力。
--experimental-upload-certs:
这个参数专门用于高可用部署,可以将需要在不同的控制平面之间传递的证书文件上传到集群中,以Secret形式保存起来,并且使用Token进行加密。值得注意的是,这个Secret会在两个小时后过期,如果过期就需要使用kubeadm init phase upload-certs --experimental-upload-certs命令重新生成。
kubeadm在初始化输出内容中包含加入新的控制平面的命令、和工作节点一致的参数--toke和--discovery-token-ca-cert-hash,以及--experimental-control-plane及--certificate-key两个参数,用于获取和使用前面生成的Secret。
如果想要部署外置etcd集群:(感兴趣可以自行搭建一下哦)
外置etcd的方案与堆叠方案差异不大,进行如下设置即可。
(1)需要为kubeadm设置一组高可用的etcd集群。
(2)将访问etcd所需的证书复制到控制平面所在的服务器上。
(3)在创建kubeadm-config.yaml时需要加入etcd的访问信息。
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndPoint: "LOAD_BALANCER_DNS:LOAD_BLANCER_PORT"
etcd:
external:
endpoints:
- https://etcd_0_ip:2379
- https://etcd_1_ip:2379
- https://etcd_2_ip:2379
caFile: /etc/kubernetes/pki/etcd/ca.crt
cartFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
简单来说,将etcd所需的证书文件以配置文件的方式指派给控制平面即可。
用kubeadm部署高可用Kubernetes集群的过程。在完成控制平面的部署之后,就可以在其中加入工作节点了。
这是一个非常简化的过程,HAProxy成为新的单点,可能导致整体发生故障,因此在实际工作中需要根据生产环境的具体情况,换用硬件负载均衡器方案,或者使用软件进行VIP、DNS等相关高可用保障,从而消除对单一HAProxy的依赖。
小结:
本节内容你掌握了吗?集群你搭建出来了吗?
不懂的记得在下方留言~多多关注。
更多推荐
所有评论(0)