腾讯云部署K8s集群
本文重点介绍了腾讯云如何安装K8s集群
腾讯云部署K8s集群
文章目录
0. 导读(重要!!!一定要读)
该篇文章记录了使用腾讯云轻量级应用服务器创建k8s集群,因使用云服务器创建时和通过vmware创建在网卡配置上有很大的不同,我在配置过程中遇到了很多坑,文章中都进行了详细的记录。
个人建议先通读全文,不要着急下手,其中Master节点操作时只需要走前两步骤即可,其它步骤不要走(那是我踩过的坑),子节点操作整个步骤都不要走,也是我踩过的坑。Master节点操作前两步执行后,直接走虚拟网卡创建这一步骤即可,文章里面有详细的解释。
1. 环境准备
版本
集群版本:
-
k8s=v1.21.0
-
kube-apiserver:v1.21.0
-
kube-proxy:v1.21.0
-
kube-controller-manager:v1.21.0
-
kube-scheduler:v1.21.0
-
coredns:v1.8.0
-
etcd:3.4.13-0
-
pause:3.4.1
服务器配置
云产商 | Ip地址 | 系统环境 | 配置 | 角色 |
---|---|---|---|---|
腾讯云轻量级应用服务器 | XX.XX.236.133 | CentOS 7.6 | CPU: 4核 内存: 2GB | master |
腾讯云轻量级应用服务器 | XX.XX.91.15 | CentOS 8.0 | CPU: 4核 内存: 4GB | node1 |
端口配置
主节点:
NodePort Services是pod服务的默认端口范围。这里如果希望Master的IP也可以访问Pod服务,那么也可以给Master主机开放这些端口(建议)
子节点:
所有节点:
Flannel网络组件构建Pod之间的通信时需要的配置(本文使用的不是Flannel网络,可不配置此项)
协议 | 方向 | 端口范围 | 作用 | 使用者 |
---|---|---|---|---|
UDP | 入站 | 8472 | vxlan Overlay 网络通信 | Overlay 网络 |
2. 安装步骤
所有主机操作
1. 提前准备
-
配置各主机的名称和hosts
-
配置主机名称:vi /etc/hostname
命令: master服务器: k8s-master node1号服务器: k8s-node01
-
修改hosts:
添加: IP地址 hostname XX.XX.236.113 k8s-master XX.XX.91.15 k8s-node01
-
-
在K8s中为了高效运行,整个集群的机器需要关闭防火墙、SWAP分区以及Selinux,使用如下命令:
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 暂时关闭SWAP分区
swapoff -a
# 永久禁用SWAP分区
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 禁用Selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
- 将系统中桥接的IPv4以及IPv6的流量串通:
cat >/etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
-
时间同步
# 时间同步 yum install ntpdate -y ntpdate time.windows.com
2. 安装docker
详细看这一篇:mystudy/服务器部署/Docker基础篇.md · Zhang-HaoQi/Knowledge - 码云 - 开源中国 (gitee.com)
3. 安装Kubernetes的安装组件
-
查看最新版的k8s
curl -sSL https://dl.k8s.io/release/stable.txt
目前最新版本是1.24.2,k8s1.24版本之后不再使用docker作为容器,因此我们暂不使用该版本,使用1.21.0版本进行安装
-
安装k8s的yum源
vi /etc/yum.repos.d/kubernetes.repo # 在这个文件中输入 [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enable=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
-
移除旧版本
yum remove -y kubelet kubeadm kubectl
-
查看可安装的版本
yum list kubelet --showduplicates | sort -r
-
安装kubelet、kubeadm、kubectl 指定版本
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
-
设置开机启动
systemctl enable kubelet.service
Master节点操作(只进行第一步和第二步操作,之后直接走虚拟网卡创建步骤)
-
安装初始化master节点镜像
#!/bin/bash images=( kube-apiserver:v1.21.0 kube-proxy:v1.21.0 kube-controller-manager:v1.21.0 kube-scheduler:v1.21.0 coredns:v1.8.0 etcd:3.4.13-0 pause:3.4.1 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/xue_k8s_images/$imageName done
开启执行权限并运行脚本
chmod +x images.sh && ./images.sh
-
注意1.21.0版本的k8s coredns镜像比较特殊,结合阿里云需要特殊处理,重新打标签
docker tag registry.cn-hangzhou.aliyuncs.com/xue_k8s_images/coredns:v1.8.0 registry.cn-hangzhou.aliyuncs.com/xue_k8s_images/coredns/coredns:v1.8.0
-
初始化主节点**(该操作废弃,直接查看虚拟网卡创建这一步)**
kubeadm init \
--apiserver-advertise-address=10.0.24.17 \
--image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
注意:–apiserver-advertise-address是内网ip,即云服务器的ip地址(如果配置成内网ip,则会)
出现报错:
[警告IsDockerSystemdCheck]:检测到“cgroupfs”作为Docker cgroup驱动程序。 推荐的驱动程序是“systemd”。
解决措施:
-
修改/etc/docker/daemon.json文件,添加推荐的驱动
"exec-opts":["native.cgroupdriver=systemd"]
-
重启docker并查看状态
systemctl restart docker systemctl status docker
执行完成后再次执行初始化主节点语句
kubeadm init \
--apiserver-advertise-address=10.0.24.17 \
--image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
成功:
-
按照上方图片提示,继续下一步。(该操作废弃,直接查看虚拟网卡创建这一步)
-
复制相关文件
To start using your cluster, you need to run the following as a regular user: 要开始使用集群,您需要以常规用户的身份运行以下命令: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
部署一个pod网络
提示部署一个docker网络
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
命令检查
查看集群中所有部署好的pod:
kubectl get pod -A
查看集群所有机器的状态
kubectl get nodes
-
-
将子节点加入到master节点**(该操作废弃,直接查看虚拟网卡创建这一步)**
token过期
kubeadm token create --print-join-command kubeadm token create --ttl 0 --print-join-command # 生成永久token kubeadm token list 查看token的列表
子节点执行命令
kubeadm join 10.0.24.17:6443 --token ixhnzj.f2yevqsxq4clfhwx \ --discovery-token-ca-cert-hash sha256:e4aeb1795bbcb00c4a5bd60c8953841789765e69ebb63836fbbb1b62ece1cecb
子节点操作(该操作废弃,直接查看虚拟网卡创建这一步)
- 不确定者两步骤是否必要(出现了问题配置了这两步,但是配置好后还是不行)
# node节点执行
iptables -t nat -A OUTPUT -d 10.0.24.17 -j DNAT --to-destination 82.157.236.133
# master节点执行
iptables -t nat -A OUTPUT -d 10.0.12.14 -j DNAT --to-destination 159.75.91.15
-
加入主节点
kubeadm join 10.0.24.17:6443 --token ixhnzj.f2yevqsxq4clfhwx \ --discovery-token-ca-cert-hash sha256:e4aeb1795bbcb00c4a5bd60c8953841789765e69ebb63836fbbb1b62ece1cecb
-
此时卡死,无法进行下一步
在命令后方添加–v=2,查看详细的日志
kubeadm join 10.0.24.17:6443 --token ixhnzj.f2yevqsxq4clfhwx \ --discovery-token-ca-cert-hash sha256:e4aeb1795bbcb00c4a5bd60c8953841789765e69ebb63836fbbb1b62ece1cecb --v-2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lIeIWEXa-1656059397278)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220624085653130.png)]
发现,请求超时。回想了一下,原因可能在于不同的云服务之间,内网可能是无法直接互通的,因此我决定在master节点初始化(init)的时候,使用外网ip (真实的服务器地址)。
因为之前配置好了,因此需要重置一下k8s。
kubeadm reset # 重置
rm -rf $HOME/.kube # 移除相关配置
# 使用外网ip初始化master节点
kubeadm init \
--apiserver-advertise-address=XX.XX.236.113 \ # 服务器ip
--image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
结果出现了这个报错(可能跟应用服务器的本身有关,看网上资料大概是购买的服务器真实的IP并不在网卡上,需要另外配置)
找到了一篇阿里云配置k8s的文章,但是没有成功,还是一直卡在这里:(149条消息) 基于阿里云ECS服务器搭建k8s集群_落日后的余晖的博客-CSDN博客_阿里云搭建kubernetes
解决:
后经过查找资料,我们直接使用服务器公网IP启动K8S集群,但是直接是不行的,服务器上没有这个IP的网卡,所以我们需要在对应网卡上创建一个对应公网IP的虚拟网卡:
注意:这里是创建一个新的虚拟网卡,我当时没开仔细,直接在eth0:里面添加了真实服务器的ip地址作为网卡,结果服务器直接链接不上了,在腾讯云官网使用vnc登陆后,将eth0改成默认的才得以正常链接
虚拟网卡创建
由于云主机网卡绑定的都是内网 IP, 而且几台云服务器位于不同的内网中(VPC网络不互通), 直接搭建会将内网 IP 注册进集群导致搭建不成功。
解决方式:使用虚拟网卡绑定公网 IP, 使用该公网 IP 来注册集群。
-
创建虚拟网卡,并绑定公网ip(每台机器都需要执行)
# 所有主机都要创建虚拟网卡,并绑定对应的公网 ip # 临时生效,重启会失效 ifconfig eth0:1 <你的公网IP> # 永久生效 cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOF BOOTPROTO=static DEVICE=eth0:1 IPADDR=<你的公网IP> PREFIX=32 TYPE=Ethernet USERCTL=no ONBOOT=yes EOF
查看配置的虚拟网卡:ifconfig
-
修改kubelet启动参数文件(每台机器都需要执行)
# 此文件安装kubeadm后就存在了 vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf # 注意,这步很重要,如果不做,节点仍然会使用内网IP注册进集群 # 在末尾添加参数 --node-ip=公网IP ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=<公网IP>
-
初始化master节点
执行初始化操作(master节点操作)
kubeadm init \ --apiserver-advertise-address=XX.XX.236.113 \ # 真实ip地址 --image-repository registry.cn-hangzhou.aliyuncs.com/xue_k8s_images \ --kubernetes-version v1.21.0 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16
终于:执行成功了,在不配置虚拟网卡之前,使用公网ip进行init的时候,总是异常。
# 创建相应文件夹
要开始使用集群,您需要以常规用户的身份运行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 配置网络
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
-
根据提示,创建文件夹和布置好网络后,进入子节点服务器,使用join命令
如果之前join过,最好先重置子节点(kubeadm reset),再加入主节点
kubeadm reset # 重置
rm -rf $HOME/.kube # 移除相关配置
# 加入主节点
kubeadm join xx.xx.236.113:6443 --token cy8q3s.esmh256v2kk5vayp \
--discovery-token-ca-cert-hash sha256:7caec2dcfedb6906319df9685bd5f300e29d1dfadadd131ec3bbc91a8cc8127a
成功
在主节点执行查看命令:kubectl get nodes
,发现node01已经成功添加到集群中。配置完成
3. 问题汇总
1. cgroupfs作为doker驱动,推荐systemd
1. 腾讯云不同帐号不同服务器的内网不互通问题
腾讯云的轻量级服务器默认同一帐号,同一区域的服务器内网是互通的,我这里是两个帐号,两台区域不同的服务器,因此内网不互通,只能配置外网,但是云服务器提供的ip地址不能直接当作网卡使用,需要创建虚拟网卡。
云服务器 修改内网 IP 地址-操作指南-文档中心-腾讯云 (tencent.com)
2. 腾讯云轻量级应用服务器修改网卡后,链接不上
注意:在上方blog中,人家提到的是创建虚拟网卡,而我直接修改了网卡,导致链接不上。
vnc登陆后,把配置还原到修改前,重新启动就可以了。
进入:
4. 参考blog
(149条消息) 基于阿里云ECS服务器搭建k8s集群_落日后的余晖的博客-CSDN博客_阿里云搭建kubernetes
(152条消息) 三、公网环境搭建Kubernetes (k8s) 集群的详细图解_胖太乙的博客-CSDN博客_k8s公网搭建
更多推荐
所有评论(0)