- 公司内部进行了一次高可用k8s科普,故作此记录
- 安装docker并配置一些基础参见https://www.jianshu.com/p/f43eb65c2d3b
https://www.jianshu.com/p/77226fca5a0c - 本次采用5台虚拟机,整体是3台master和两台node节点
5台机器
-
更改驱动为systemd
"exec-opts":["native.cgroupdriver=systemd"] 文件位置为/etc/docker/daemon.json 修改后重启docker service docker restart
- 禁用swap
vim /etc/fstab注释掉这行,重启机器
- 安装一些基础软件
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
- 国内添加阿里云源信息
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >>/etc/apt/sources.list.d/kubernetes.list
- 国内添加认证信息
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
- 更新软件源
apt update
- 查找kubeadm版本
apt-cache madison kubelet
- 选择kubeadm、kubelet、kubectl版本(注意:最好与k8s版本一致)
这里选择1.17.1-00版本
- 安装kubeadm、kubelet、kubectl
apt-get install kubeadm=1.17.1-00 && apt-get install kubelet=1.17.1-00 && apt-get install kubectl=1.17.1-00
- 配置高可用,这里选择nginx作为高可用负载均衡,安装可以参考https://www.jianshu.com/p/02a647941173
image.png
worker_processes 1;
events {
worker_connections 1024;
}
stream {
upstream backend {
#hash $remote_addr consistent;
server 172.20.225.242:6443 max_fails=3 fail_timeout=30s;
server 192.168.1.241:6443 max_fails=3 fail_timeout=30s;
server 192.168.1.240:6443 max_fails=3 fail_timeout=30s;
}
server {
listen 10443;
proxy_pass backend;
}
}
- 暴露方式
可选配置hosts、外网域名、IP等等
- 查看所有镜像
kubeadm config images list
- 通过kubeadm拉起指定版本k8s第一个matset节点
报错,vim /etc/profile 行尾追加export DOCKER_API_VERSION=1.35 然后 source /etc/profile
- 重新拉起
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.17.1 --control-plane-endpoint "192.168.1.241:10443" --upload-certs | tee /root/log 等待完成
- 其余两台master节点加入集群
kubeadm join 192.168.1.241:10443 --token vnit62.l5ydr8p0j0exz3dn \ --discovery-token-ca-cert-hash sha256:7b6726808a3a68918b99ccd84d8c355dd063b41a9f1bcbbbec2725471a963a47 \ --control-plane --certificate-key 4cbe583ac1d398396117d6370f1e754e9ee7abbed17ba6e13145542513cb0a8a
- 其余node加入集群
kubeadm join 192.168.1.241:10443 --token vnit62.l5ydr8p0j0exz3dn \ --discovery-token-ca-cert-hash sha256:7b6726808a3a68918b99ccd84d8c355dd063b41a9f1bcbbbec2725471a963a47
- 选择一台master安装kubectl命令配置文件
mkdir -p
HOME/.kube/config
sudo chown(id -g) $HOME/.kube/config
- 安装集群网络cni插件
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
- 注意
1.要重新上传证书并生成新的解密密钥,请在已加入集群节点的控制平面上使用以下命令:sudo kubeadm init phase upload-certs --upload-certs
2.您还可以在 init 期间指定自定义的 --certificate-key,以后可以由 join 使用。 要生成这样的密钥,可以使用以下命令:kubeadm alpha certs certificate-key
3.节点离开步骤
kubectl drain izrj98onkrg7dzoj7hwzsjz --delete-local-data --force --ignore-daemonsets node/izrj98onkrg7dzoj7hwzsjz
删除节点
kubectl delete node izrj98onkrg7dzoj7hwzsjz
验证
kubectl get nodes
4.生产永久token:kubeadm token create --ttl 0 --print-join-command
5.如果发现nodeport模式不是所有主机都可用,更改防火墙规则:iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
6.设置开机自动设置防火墙规则
文件位置:
cd /etc/init.d/
vim add-forward-iptable-rule.sh
内容:
#!/bin/bash
### BEGIN INIT INFO
# Provides: storeteam.cn
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: ciptables service
# Description: ciptables service daemon
### END INIT INFO
sleep 10
iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
权限:
chmod 777 add-forward-iptable-rule.sh
开机启动:
sudo update-rc.d add-forward-iptable-rule.sh defaults 90
网友评论