[kubernetes]4-2 高可用集群部署(上)

4-2 高可用集群部署(上)

二、高可用集群部署

1. CA证书(任意节点)

1.1 安装cfssl

cfssl是非常好用的CA工具,我们用它来生成证书和秘钥文件

 安装过程比较简单,如下:

# 下载

$ mkdir -p ~/bin

$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O ~/bin/cfssl

$ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O ~/bin/cfssljson

 

# 修改为可执行权限

$ chmod +x ~/bin/cfssl ~/bin/cfssljson

 

# 设置PATH   好像不需要也可以  已经下到bin了

$ vi ~/.bash_profile 添加

export PATH=$PATH:/opt/kubernetes/bin:~bin

$ source ~/.bash_profile

 

# 验证

$ cfssl version

1.2 生成根证书

根证书是集群所有节点共享的,只需要创建一个 CA 证书,后续创建的所有证书都由它签名。

# 生成证书和私钥

$ cd /root/kubernetes-ha-binary/target/pki

$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca

 

# 生成完成后会有以下文件(我们最终想要的就是ca-key.pem和ca.pem,一个秘钥,一个证书)

$ ls

ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

 

# 创建目录

$ ssh <user>@<node-ip> "mkdir -p /etc/kubernetes/pki/"

 

# 分发到每个主节点

$ scp ca*.pem <user>@<node-ip>:/etc/kubernetes/pki/

 

 

2. 部署etcd集群(master节点)

2.1 下载etcd

如果你是从网盘下载的二进制可以跳过这一步(网盘中已经包含了etcd,不需要另外下载)。

 没有从网盘下载bin文件的话需要自己下载etcd

$ wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz

2.2 生成证书和私钥

# 生成证书、私钥

$ cd /root/kubernetes-ha-binary/target/pki/etcd

$ cfssl gencert -ca=../ca.pem \

    -ca-key=../ca-key.pem \

    -config=../ca-config.json \

    -profile=kubernetes etcd-csr.json | cfssljson -bare etcd

 

# 分发到每个etcd节点

$ scp etcd*.pem <user>@<node-ip>:/etc/kubernetes/pki/

 

2.3 创建service文件

# scp配置文件到每个master节点

$ scp target/<node-ip>/services/etcd.service <node-ip>:/etc/systemd/system/

 

# 创建数据和工作目录

$ ssh <user>@<node-ip> "mkdir -p /var/lib/etcd"

2.4 启动服务

etcd 进程首次启动时会等待其它节点的 etcd 加入集群,命令 systemctl start etcd 会卡住一段时间,为正常现象。

#启动服务

$ systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd

 

#查看状态

$ service etcd status

 

#查看启动日志

$ journalctl -f -u etcd

3. 部署api-server(master节点)

3.1 生成证书和私钥

# 生成证书、私钥

$ cd /root/kubernetes-ha-binary/target/pki/apiserver

$ cfssl gencert -ca=../ca.pem \

  -ca-key=../ca-key.pem \

  -config=../ca-config.json \

  -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

 

 

# 分发到每个master节点

$ scp kubernetes*.pem <user>@<node-ip>:/etc/kubernetes/pki/

 

3.2 创建service文件

# scp配置文件到每个master节点

$ scp  /root/kubernetes-ha-binary/target/<node-ip>/services/kube-apiserver.service <user>@<node-ip>:/etc/systemd/system/

 

# 创建日志目录

$ ssh <user>@<node-ip> "mkdir -p /var/log/kubernetes"

3.3 启动服务

#启动服务

$ systemctl daemon-reload && systemctl enable kube-apiserver && systemctl restart kube-apiserver

 

#查看运行状态

$ service kube-apiserver status

 

#查看日志

$ journalctl -f -u kube-apiserver

 

#检查监听端口

$ netstat -ntlp

4. 部署keepalived - apiserver高可用(master节点)

4.1 安装keepalived

# 在两个主节点上安装keepalived(一主一备)

$ yum install -y keepalived

4.2 创建keepalived配置文件

# 创建目录

$ ssh <user>@<master-ip> "mkdir -p /etc/keepalived"

$ ssh <user>@<backup-ip> "mkdir -p /etc/keepalived"

 

# 分发配置文件

$ scp /root/kubernetes-ha-binary/target/configs/keepalived-master.conf <user>@<master-ip>:/etc/keepalived/keepalived.conf

$ scp /root/kubernetes-ha-binary/target/configs/keepalived-backup.conf <user>@<backup-ip>:/etc/keepalived/keepalived.conf

 

# 分发监测脚本

$ scp /root/kubernetes-ha-binary/target/configs/check-apiserver.sh <user>@<master-ip>:/etc/keepalived/

$ scp /root/kubernetes-ha-binary/target/configs/check-apiserver.sh <user>@<backup-ip>:/etc/keepalived/

 

4.3 启动keepalived

# 分别在master和backup上启动服务  先启动主节点

$ systemctl enable keepalived && service keepalived start

 

# 检查状态

$ service keepalived status

 

# 查看日志

$ journalctl -f -u keepalived

 

 

# 访问测试

$ curl --insecure https://<master-vip>:6443/

 

5. 部署kubectl(任意节点)

kubectl 是 kubernetes 集群的命令行管理工具,它默认从 ~/.kube/config 文件读取 kube-apiserver 地址、证书、用户名等信息。

5.1 创建 admin 证书和私钥

kubectl 与 apiserver https 安全端口通信,apiserver 对提供的证书进行认证和授权。

 kubectl 作为集群的管理工具,需要被授予最高权限。这里创建具有最高权限的 admin 证书。

# 创建证书、私钥

$ cd /root/kubernetes-ha-binary/target/pki/admin

$ cfssl gencert -ca=../ca.pem \

  -ca-key=../ca-key.pem \

  -config=../ca-config.json \

  -profile=kubernetes admin-csr.json | cfssljson -bare admin

5.2 创建kubeconfig配置文件

kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书

# 设置集群参数

$ kubectl config set-cluster kubernetes \

  --certificate-authority=../ca.pem \

  --embed-certs=true \

  --server=https://<MASTER_VIP>:6443 \

  --kubeconfig=kube.config

 

# 设置客户端认证参数

$ kubectl config set-credentials admin \

  --client-certificate=admin.pem \

  --client-key=admin-key.pem \

  --embed-certs=true \

  --kubeconfig=kube.config

 

# 设置上下文参数

$ kubectl config set-context kubernetes \

  --cluster=kubernetes \

  --user=admin \

  --kubeconfig=kube.config

 

# 设置默认上下文

$ kubectl config use-context kubernetes --kubeconfig=kube.config

 

# 创建目录 (kubectl 个人只在master01上安装了 3台都安装也可以)

$ scp ssh <user>@<master-ip> "mkdir -p ~/.kube"

 

# 分发到目标节点 (kubectl 个人只在master01上安装了 3台都安装也可以)

$ scp kube.config <user>@<master-ip>:~/.kube/config

 

5.3 授予 kubernetes 证书访问 kubelet API 的权限

在执行 kubectl exec、run、logs 等命令时,apiserver 会转发到 kubelet。这里定义 RBAC 规则,授权 apiserver 调用 kubelet API。

在master01上执行 给kubectl授权

$ kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes

 

5.4 小测试

# 查看集群信息

$ kubectl cluster-info

$ kubectl get all --all-namespaces

$ kubectl get componentstatuses

 

6. 部署controller-manager(master节点)

controller-manager启动后将通过竞争选举机制产生一个 leader 节点,其它节点为阻塞状态。当 leader 节点不可用后,剩余节点将再次进行选举产生新的 leader 节点,从而保证服务的可用性。

6.1 创建证书和私钥

# 生成证书、私钥

$ cd /root/kubernetes-ha-binary/target/pki/controller-manager

$ cfssl gencert -ca=../ca.pem \

  -ca-key=../ca-key.pem \

  -config=../ca-config.json \

  -profile=kubernetes controller-manager-csr.json | cfssljson -bare controller-manager

# 分发到每个master节点

$ scp controller-manager*.pem <user>@<node-ip>:/etc/kubernetes/pki/

 

6.2 创建controller-manager的kubeconfig

# 创建kubeconfig

$ kubectl config set-cluster kubernetes \

  --certificate-authority=../ca.pem \

  --embed-certs=true \

  --server=https://<MASTER_VIP>:6443 \

  --kubeconfig=controller-manager.kubeconfig

 

$ kubectl config set-credentials system:kube-controller-manager \

  --client-certificate=controller-manager.pem \

  --client-key=controller-manager-key.pem \

  --embed-certs=true \

  --kubeconfig=controller-manager.kubeconfig

 

$ kubectl config set-context system:kube-controller-manager \

  --cluster=kubernetes \

  --user=system:kube-controller-manager \

  --kubeconfig=controller-manager.kubeconfig

 

$ kubectl config use-context system:kube-controller-manager --kubeconfig=controller-manager.kubeconfig

 

# 分发controller-manager.kubeconfig到每一个master节点上

$ scp controller-manager.kubeconfig <user>@<node-ip>:/etc/kubernetes/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值