K8S集群环境搭建
简单玩了一下K8S,安装也太费劲了,一大堆坑,浅浅记录一下吧。
安装环境
- CentOS Stream release 8
- K8S v1.23.6
- Docker version 26.0.0, build 2ae903e
主机名 | IP | CPU | 内存 |
---|---|---|---|
k8s-mst | 192.168.229.130 | 4 | 8G |
k8s-nd1 | 192.168.229.131 | 4 | 4G |
k8s-nd2 | 192.168.229.132 | 4 | 4G |
安装步骤
下面的步骤2.1-2.8,是需要在三台虚拟机上都执行的;2.9-2.10只在master主机执行即可;2.11在所有节点主机执行即可;2.12-2.14在master主机执行即可。
基础操作
下面的操作代表的含义依次是:关闭防火墙、关闭selinux、关闭swap分区
1 | systemctl stop firewalld && systemctl disable firewalld && iptables -F |
分别修改各主机的主机名
1 | hostnamectl set-hostname k8s-mst |
修改各主机的hosts文件
1 | 192.168.229.130 k8s-mst |
利用 scp
命令将 /etc/hosts
文件复制到其他主机
1 | scp /etc/hosts k8s-nd1:/etc/hosts |
修改内核参数
1 | cat > /etc/sysctl.d/k8s.conf << EOF |
安装Docker
1 | curl -fsSL https://get.docker.com | bash -s docker |
如果要适配K8S,需要对Docker的daemon.json文件进行升级,配置如下:
1 | cat > /etc/docker/daemon.json << EOF |
启动Docker服务
1 | systemctl daemon-reload && systemctl enable --now docker |
配置K8S的yum源
需要自己添加一个用于下载K8S的yum源,这里我使用的是阿里云的源。
1 | cat > /etc/yum.repos.d/kubernetes.repo << EOF |
安装K8S
1.24.X 版本都不再兼容Docker,所以还是使用1.23.X版本。
1 | yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 |
启动K8S服务
1 | systemctl enable --now kubelet |
初始化K8S集群
1 | kubeadm init \ |
- kubernetes-version 集群版本
- apiserver-advertise-address API服务器通告地址,即k8s主节点。
- service-cidr 服务网段
- pod-network-cidr Pod网段
- image-repository 镜像仓库
这一步会产生很多奇奇怪怪的问题,但是如果是按照我这个步骤和版本安装下来的,估计是不会出问题的。安装完事之后如果看到如下输出,说明安装成功了。
1 | kubeadm join 192.168.229.130:6443 --token iks8xq.pqnnn0uvotgtloyj \ |
配置kubectl
不要清屏,按照上面的提示,依次执行他给出来的命令。
1 | mkdir -p $HOME/.kube |
节点加入集群
如果还留着提示,直接复制他给出的kubeadm join
命令,然后执行即可。如果丢了,需要手动查看一下两个参数,--token
和--discovery-token-ca-cert-hash
。
token可以使用如下命令查看,比如是“xxxxxx”。
1 | kubeadm token list |
discovery-token-ca-cert-hash可以使用如下命令查看,比如是“yyyyyy”。
1 | openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2> /dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' |
然后给他们组合到一块
1 | kubeadm join 192.168.229.130:6443 --token xxxxxx \ |
安装网络插件CNI
1 | mkdir /opt/k8s && cd /opt/k8s |
这个时我们就下载了一个文件名字叫:calico.yaml,但是这个文件需要改一下cidr。这里的cidr就是我们初始化时候--pod-network-cidr
字段的cidr。
vim calico.yaml,搜索“CALICO_IPV4POOL_CIDR”。
下载calico.yaml文件里描述的镜像
calico.yaml 里面用的都是docker.io的镜像,你可以先使用grep image calico.yaml
命令查看一下。然后我们做一下修改,执行以下命令:
1 | sed -i 's#docker.io/##g' calico.yaml |
完事后你也可以再验证一下:grep image calico.yaml
。然后kubectl apply一下:
1 | kubectl apply -f calico.yaml |
这个时候kebe就会自己去下载镜像了,不会前台显示,下载速度取决于你的网速。但是你可以通过kubectl get pods -n kube-system
命令查看一下,如果镜像下载完了,就会看到如下输出,所有容器都是运行起来的:
这样就完成了K8S的安装。
验证
我们可以去运行一个nginx实例,去看看到底还有没有什么问题。
1 | kubectl create deployment nginx --image=nginx |
在宿主机上访问节点IP:port。
其他高级配置
配置在其他节点的控制
这个就是说在任何节点上都可以对k8s的API-server进行访问,对节点进行管理。换言之,你不配置这一步,你只能在主节点进行kubectl get nodes
命令,其他节点执行不了。
1 | scp /etc/kubernetes/admin.conf root@k8s-nd1:/etc/kubernetes |
拷贝过去之后,分别在两个节点上执行如下命令:
1 | echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile |
如果显示有效内容,说明配置成功了。
配置kubectl命令自动补全
初始配置K8S是不能进行命令补全的,使用起来太麻烦,尤其是对于我这个Tab键重度使用者,实在太不爽。下面是配置K8S命令补全的方法:
一般在master节点执行就可以满足需求,但是如果有需求,也可以在worker节点上配置。
1 | yum install -y bash-completion |