设计高可用的Kubeadm架构
前面给大家介绍了K8S很多基础的知识,现在我们要进行实战与理论的结合。之前我有发布一个课程《Kubernetes从入门到弃坑》,里面有提到Kubernetes的单机部署,但是在生产环境中我们不可能用单节点kubernetes。所以今天让我们一起设计一下高可用的Kubeadm架构。
ETCD 集群
master节点组件中,ETCD是集群主数据库,存储所有资源对象和状态,API 传输数据信息时会存入相关信息到etcd中,是实时更新的。所以要设计一个高可用的架构,我们需要etcd集群化,防止单节点的etcd故障,导致kubernetes集群整体宕机。
资源信息表
服务器主机名服务器IP节点master1172.16.2.224主节点master2172.16.2.226备用节点master3172.16.2.227备用节点
修改hosts信息
vim /etc/hosts
```
172.16.2.224 master1
172.16.2.226 master2
172.16.2.227 master3
172.16.2.225 work1
```
获取etcd安装包
cd
yum -y install vim wget
wget https://github.com/coreos/etcd/releases/download/v3.2.24/etcd-v3.2.24-linux-amd64.tar.gz
tar -zxvf etcd-v3.2.24-linux-amd64.tar.gz
cd etcd-v3.2.24-linux-amd64
cp etcd etcdctl /usr/local/bin/
创建etcd数据目录
mkdir -p /var/lib/etcd
创建etcd的systemd unit文件
vim /usr/lib/systemd/system/etcd.service
```
#master1
[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd --name master1 --initial-advertise-peer-urls http://172.16.2.224:2380 --listen-peer-urls http://172.16.2.224:2380 --listen-client-urls http://172.16.2.224:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.2.224:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster master1=http://172.16.2.224:2380,master2=http://172.16.2.226:2380,master3=http://172.16.2.227:2380 --initial-cluster-state new --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
```
# master2
[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd --name master2 --initial-advertise-peer-urls http://172.16.2.226:2380 --listen-peer-urls http://172.16.2.226:2380 --listen-client-urls http://172.16.2.226:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.2.226:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster master1=http://172.16.2.224:2380,master2=http://172.16.2.226:2380,master3=http://172.16.2.227:2380 --initial-cluster-state new --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
```
# master3
[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd --name master3 --initial-advertise-peer-urls http://172.16.2.227:2380 --listen-peer-urls http://172.16.2.227:2380 --listen-client-urls http://172.16.2.227:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.2.227:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster master1=http://172.16.2.224:2380,master2=http://172.16.2.226:2380,master3=http://172.16.2.227:2380 --initial-cluster-state new --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
启动etcd服务
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd
systemctl status etcd
查看集群信息
# 查看集群中的成员
etcdctl member list
# 查看集群健康状态
etcdctl cluster-health
閱讀更多 崔格拉斯 的文章