kubeasz安装集群
环境准备:
192.168.213.11 master-etcd-01
192.168.213.12 master-etcd-02
192.168.213.13 master-etcd-02
192.168.213.21 node-01
192.168.213.22 node-02
192.168.213.31 haproxy-az-01
192.168.213.32 haproxy-02
!!!主机名千万不能一样,因为etcd中会针对主机名分配pod ip地址,如果主机名一样会导致有一台node无法分配到pod地址
安装部署环境:
apt install git ansible -y
##管理节点操作
export release=3.3.1
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
./ezdown -D #执行环境初始化安装docker下载初始化环境用的文件
##################kubeasz目录简要说明############
/etc/kubeasz #配置文件目录
/etc/kubeasz/clusters #创建的集群配置目录
/etc/kubeasz/playbooks #存储ezctl setup 集群名字 编号的编号执行文件
/etc/kubeasz/roles #编号文件所执行的操作的文件
################################################
cd /etc/kubeasz
./ezctl new k8s-cluster1 #创建集群
##修改k8s-cluster1/hosts文件
##修改k8s-cluster1/config.yml文件
CA_EXPIRY:ca证书过期时间
CERT_EXPIRY:crt证书过期时间
ETCD_DATA_DIR:etcd数据文件路径
ETCD_WAL_DIR:etcd预写日志(类似于mysql的redolog),如果为空默认放在ETCD_DATA_DIR目录
ENABLE_MIRROR_REGISTRY:是否启用容器镜像仓库
SANDBOX_IMAGE:pause镜像的下载路径
INSECURE_REG:docker添加信任的registry
MASTER_CERT_HOSTS:证书签发的时候会将你配置ip和域名签发进去,可以配置多个ip和域名(正常配置master前面的负载均衡ip)
NODE_CIDR_LEN:pod的网络掩码,只针对flano生效
MAX_PODS:每个节点最大的pod个数
CALICO_IPV4POOL_IPIP:是否开启IPIP模式,如果改成off会提高网络性能,但是唯一的问题就是node不能跨子网通信,不同子网的node,pod网络不同(有的云服务不关闭这个pod网络不同)
CALICO_NETWORKING_BACKEND:设置calico网络策略
CALICO_RR_ENABLED:是否设置路由反射节点,如果主机数量没有超过50个就不用开,如果开启后就需要设置某个节点做路由反射
CALICO_RR_NODES:配置路由反射节点ip(如果配置了此节点,需要配置多个考虑高可用)
dns_install:是否安装集群dns
ENABLE_LOCAL_DNS_CACHE:是否开启本地dns缓存,会在主机上开启个组件,现在基本都会将缓存放在corodns中,针对性比较高
metricsserver_install:是否安装metrics server
dashboard_install:是否安装dashboard
##生成ssh公钥并cp给每一个集群服务器
ssh-keygen
apt install sshpass
cd /etc/kubeasz/clusters/k8s-cluster1
cat <<EOF > key.sh
#!/bin/bash
IP="
192.168.213.11
192.168.213.12
192.168.213.13
192.168.213.21
192.168.213.22
192.168.213.32
"
for i in \$IP ;do
sshpass -p 123 ssh-copy-id \$i -o StrictHostKeyChecking=no
ln -sf /usr/bin/python3 /usr/bin/python
echo " 密钥copy完成!"
ssh \${i} ln -sv /usr/bin/python3 /usr/bin/python
echo " 软连接创建完成"
done
ln -sf /usr/bin/python3 /usr/bin/python
EOF
chmod +x key.sh
bash -x key.sh
#####如果报错权限不足,则是没开启root账号登陆#####
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd
bash -x key.sh
##########################################
#############################
请再次检查一次hosts文件和config.yml
############################
cd /etc/kubeasz
./ezctl setup k8s-cluster1 01 #初始化集群基础设施
./ezctl setup k8s-cluster1 02 #初始化安装etcd集群
##测试所有etcd节点心跳
export node_etcd="192.168.213.11 192.168.213.12 192.168.213.13"; for i in $node_etcd; do ETCDCTL_API=3 /usr/local/bin/etcdctl --endpoints=https://${i}:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem endpoint health; done
##etcd初始化后下一步骤初始容器运行时,因为咱们使用的containerd,而且pause镜像使用的自己https的harbor,所以需要配置containerd跳过证书验证
vim /etc/kubeasz/roles/containerd/templates/config.toml.j2
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.wyh.net"]
endpoint = ["https://harbor.wyh.net"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.wyh.net".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.wyh.net".auth]
username = "admin"
password = "123456"
./ezctl setup k8s-cluster1 03 #安装容器运行时
./ezctl setup k8s-cluster1 04 #安装master
./ezctl setup k8s-cluster1 05 #安装node
#############操作06之前需要干的事情###################
docker tag easzlab.io.local:5000/calico/node:v3.19.4 harbo.wyh.net/base-images/calico-node:v3.19.4
docker tag easzlab.io.local:5000/calico/kube-controllers:v3.19.4 harbor.wyh.net/base-images/calico-kube-controllers:v3.19.4
docker tag easzlab.io.local:5000/calico/cni:v3.19.4 harbor.wyh.net/base-images/calico-cni:v3.19.4
docker tag easzlab.io.local:5000/calico/pod2daemon-flexvol:v3.19.4 harbor.wyh.net/base-images/calico-pod2daemon-flexvol:v3.19.4
docker push harbor.wyh.net/base-images/calico-node:v3.19.4
docker push harbor.wyh.net/base-images/calico-cni:v3.19.4
#################################################
#修改calico拉取镜像的地址,将里面的easzlab.io.local全部换成本地harbor
vim /etc/kubeasz/roles/calico/templates/calico-v3.19.yaml.j2
./ezctl setup k8s-cluster1 06 #安装网络
kuebctl get pod -A
###############跑两个pod测试通信是否正常###################
kubectl run net-test1 --image=centos:7.9.2009 sleep 10000000
kubectl run net-test2 --image=centos:7.9.2009 sleep 10000000
kubectl run net-test3 --image=centos:7.9.2009 sleep 10000000
kubectl get pod -owide #查看pod的ip,然后跨服务器ping另一个pod
kubectl exec -it net-test1 bash #进入容器
####################测试正常,kubeasz安装集群完成(coredns后续安装)#######################
#############master节点横向扩展#########
cd /etc/kubeasz
./ezctl add-master k8s-cluster1 192.168.213.13
#####################################
#########################################集群升级##############################################
#############################################################################################
#升级前最好有测试环境,而且最好小版本号升级,如果跨大版版本,需要详细测试资源文件是否兼容
#升级是更新二进制文件,新的二进制文件来这找:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG,找对应版本
#需要下载四个包
# Source Code: kubernetes.tar.gz
# Client Binaries: kubernetes-client-linux-amd64.tar.gz
# Server Binaries: kubernetes-server-linux-amd64.tar.gz
# Node Binaries: kubernetes-node-linux-amd64.tar.gz
cd /usr/local/src/
#将压缩包上传到此目录下并解压
tar -xf kubernetes-client-linux-arm64.tar.gz
tar -xf kubernetes-node-linux-amd64.tar.gz
tar -xf kubernetes-server-linux-amd64.tar.gz
tar -xf kubernetes.tar.gz
##################解压后生成kubernetes###############
kubernetes/addons #一些k8s插件
kubernetes/server/bin #k8s组件的二进制文件
###################
######################不影响业务使用的前提升级master,需要逐个升级#####################################
#在所有node节点注释掉kube-lb代理的master-etcd-01节点,然后开始升级master1
vim /etc/kube-lb/conf/kube-lb.conf
systemctl reload kube-l
#在master-etcd-01节点上执行
systemctl stop kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler
#在安装服务器执行
cd /usr/local/src/kubernetes/server/bin
#远程复制前记得备份二进制文件
scp kube-apiserver kube-controller-manager kubectl kubelet kube-proxy kube-scheduler 192.168.213.11:/usr/local/bin/
#在master-etcd-01节点上执行
systemctl start kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler
#启动后查询是否升级成功
kubectl get nodes -owide
#在左右的node节点操作kube-lb将之前的注释取消
vim /etc/kube-lb/conf/kube-lb.conf
#################这样的结果就是master-etcd-01节点升级成功,其他的master都是这一个步骤升级##########################
###################################升级nodes##################################
#逐个升级,升级node没有办法不影响使用
#管理服务器操作驱逐node上的pod
kubectl drain 192.168.213.21 --ignore-daemonsets --force
--ignore-daemonsets:忽略daenonset控制器
--force:强制驱逐
#对应node操作
systemctl stop kubelet kube-proxy
#管理服务器复制二进制文件到node服务器
scp kubectl kubelet kube-proxy 192.168.213.21:/usr/local/bin/
#对应node操作
systemctl start kubelet kube-proxy
#因为node执行了drain,状态会被打上SchedulingDisabled,需要允许这个node调度
kubectl uncordon 192.168.213.21
kubectl get nodes -owide
#############################################################################################
####################################node升级成功,其他node也这么干################################
#升级好后需要将二进制文件复制到kubeasz中,下次添加node或者master直接就是更新后的版本
cd /usr/local/src/kubernetes/server/bin
\cp kube-apiserver kube-controller-manager kubectl kubelet kube-proxy kube-scheduler /etc/kubeasz/bin/
#######################################containerd升级#######################################
#########################################################################################
#containerd安装包下载地址:https://github.com/containerd/containerd/releases
#runc二进制包下载地址:https://github.com/opencontainers/runc/releases
#
#runc一般不需要升级,此次升级将runc包含进去了,自己升级的时候需要考虑!!
cd /usr/local/src/
tar -zxvf containerd-1.6.6-linux-amd64.tar.gz
mv runc.amd64 bin/runc && chmod +x bin/runc
\cp bin/* /etc/kubeasz/bin/containerd-bin/
#######################57分钟,未完成#################################