侧边栏壁纸
  • 累计撰写 73 篇文章
  • 累计创建 30 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

搭建k8s集群 (版本: v1.29.0, 容器使用docker)

欧泡果奶
2023-12-24 / 0 评论 / 0 点赞 / 261 阅读 / 0 字

安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS Stream 9
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

这里我准备了三台虚拟机:

主机IP
k8s-master10.211.55.7
k8s-node0110.211.55.8
k8s-node0210.211.55.9

准备环境(所有节点)

设置系统主机名

# 在10.211.55.7执行
hostnamectl set-hostname k8s-master
# 在10.211.55.8执行
hostnamectl set-hostname k8s-node01
# 在10.211.55.9执行
hostnamectl set-hostname k8s-node02

Host文件的相互解析

cat >> /etc/hosts << EOF
10.211.55.7 k8s-master
10.211.55.8 k8s-node01
10.211.55.9 k8s-node02
EOF

时间同步

yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources

关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

关闭selinux及swap

# 关闭selinux
setenforce 0 && sed -i 's/enforcing/disabled/' /etc/selinux/config
 
# 关闭swap
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

安装Docker、kubeadm、kubelet(所有节点)

安装Docker

请参考Docker的安装

配置 Docker 的 cgroup driversystemd

systemd 是 Kubernetes 自带的 cgroup 管理器,但 Docker 的 cgroup driver 默认是 cgroupfs

cat > /etc/docker/daemon.json <<EOF
{
	"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload 
systemctl restart docker

安装cri-dockerd

在 Kubernetes v1.24 及更早版本中,我们使用docker作为容器引擎在k8s上使用时,依赖一个dockershim的内置k8s组件;k8s v1.24发行版中将dockershim组件给移除了;取而代之的就是cri-dockerd (当然还有其它容器接口);简单讲CRI就是容器运行时接口(Container Runtime Interface, CRI),也就是说cri-dockerd就是以docker作为容器引擎而提供的容器运行时接口;即我们想要用docker作为k8s的容器运行引擎,我们需要先部署好cri-dockerd;用cri-dockerd来与kubelet交互,然后再由cri-dockerd和docker api交互,使我们在k8s能够正常使用docker作为容器引擎

下载安装包

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.arm64.tgz

安装二进制文件

tar zxvf cri-dockerd-0.3.8.arm64.tgz
cd cri-dockerd
mkdir -p /usr/local/bin
install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd

安装systemd服务文件

git clone https://github.com/Mirantis/cri-dockerd.git
cd cri-dockerd
install packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable --now cri-docker.socket

修改cri-docker.service

vim /etc/systemd/system/cri-docker.service

修改第10行,其中pause的版本应该对应要安装的k8s中pause的版本,如:1.29.0的k8s中的pause版本是3.9
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://

启动cri-dockerd

systemctl daemon-reload
systemctl start cri-docker
systemctl enable cri-docker

添加kubernetes软件源

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

安装kubeadm,kubelet和kubectl

# 安装kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 设置开机启动
systemctl enable --now kubelet

配置 cgroup 驱动程序

vim /etc/sysconfig/kubelet

删除原有内容,添加下面的内容
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

部署Kubernetes Master【master节点】

镜像准备

# 查看当前版本镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

# 拉取镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock
如果拉取镜像时报以下错误,这是因为kubeadm发现了多个CRI,需要指定使用哪一个:

Found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the 'criSocket' field in the kubeadm configuration file: unix:///var/run/containerd/containerd.sock, unix:///var/run/cri-dockerd.sock
To see the stack trace of this error execute with --v=5 or higher

初始化主节点

在 10.211.55.7 执行,也就是master节点,执行下面的命令:

kubeadm init --apiserver-advertise-address=10.211.55.7 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.29.0 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///var/run/cri-dockerd.sock

当我们出现下面的情况时,表示kubernetes的镜像已经安装成功

初始化成功

根据提示完成相应目录及配置文件的创建:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

执行完成后,我们使用下面命令,查看我们正在运行的节点

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   	ROLES           AGE     VERSION
k8s-master   NotReady   control-plane   6m13s   v1.29.0

能够看到,目前有一个master节点已经运行了,但是还处于未准备状态。

加入Kubernetes【Node节点】

下面我们需要到 node01 和 node02 服务器,执行下面的代码向集群添加新节点。

以下的命令是在master初始化完成后,每个人的都不一样!!!需要复制自己生成的,后面追加`--cri-socket unix:///var/run/cri-dockerd.sock`
kubeadm join 192.168.3.10:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:4746ed6ef7c224306d1689f284da56bd49fe7eaadfa1a75e2644185fd0a43109

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

kubeadm token create --print-join-command

当我们把两个节点都加入进来后,我们就可以去Master节点 执行下面命令查看情况

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   	 ROLES           AGE   VERSION
k8s-master   NotReady    control-plane   12m   v1.29.0
k8s-node01   NotReady    <none>          3m    v1.29.0
k8s-node02   NotReady    <none>          12s   v1.29.0

部署CNI网络插件 calico

使用calico部署集群网络

参考网址: https://docs.tigera.io/calico/latest/about/

calico安装

按照官网安装步骤1安装

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml

执行下面命令,如果容器状态为运行中,则代表该步骤执行完成

kubectl get pods -n tigera-operator

Success

下载步骤2中的文件,修改文件的ip地址

wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml

# 修改文件内容
vim custom-resources.yaml

修改为初始化主节点时--pod-network-cidr=10.244.0.0/16的值
cidr: 10.244.0.0/16

安装Calico

kubectl create -f custom-resources.yaml

执行下面命令,如果所有容器状态都为运行中,则代表安装完成

kubectl get pods -n calico-system

安装完成

查看节点状态,节点应都为Ready状态

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   38m   v1.29.0
k8s-node01   Ready    <none>          35m   v1.29.0
k8s-node02   Ready    <none>          35m   v1.29.0

测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

# 下载nginx 【会联网拉取nginx镜像】
kubectl create deployment nginx --image=nginx
# 查看状态
kubectl get pod

如果我们出现Running状态的时候,表示已经成功运行了

Nginx运行成功

下面我们就需要将端口暴露出去,让其它外界能够访问:

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc

能够看到,我们已经成功暴露了 80 口 到 30205 上

查看端口

我们到我们的宿主机浏览器上,访问如下地址:

http://10.211.55.7:30205/

发现我们的nginx已经成功启动了

Nginx访问成功

0

评论区