今天给大家讲解一下这个版本的实验流程
k8s想必大家以及有所了解,先看一下整体架构:
- Kubernetes整体架构:master--nodes
这个是他的工作流程
- 部署 Kubernetes 集群方式介绍
部署集群有多种方式:
minikube可以在本地运行Kubernetes的工具,minikube可以在个人计算机(包括Windows,macOS和Linux PC)上运行一个单节点Kubernetes集群,以便您可以试用Kubernetes或进行日常开发工作;
Kind和minikube类似的工具,让你在本地计算机上运行Kubernetes,此工具需要安装并配置Docker;
- 集群节点准备
1.1 主机操作系统说明
CentOS7u9

1.2 主机硬件配置说明
Cpu 4核,内存4G,硬盘100G
1.3 主机配置
1.3.1 主机名配置
由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8s-1;其中2台为worker节点,名称分别为:k8s-2及k8s-3
master节点
hostnamectl set-hostname k8s-1
k8s-2节点
hostnamectl set-hostname k8s-2
k8s-3节点
hostnamectl set-hostname k8s-3
1.3.2 主机IP地址配置
k8s-1节点IP地址为:
192.168.8.30/24
worker1节点IP地址为:
192.168.8.31/24
worker2节点IP地址为:
192.168.8.32/24
1.3.3 主机名与IP地址解析
所有集群主机均需要进行配置。
vim /etc/hosts
添加:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.30 k8s-1
192.168.8.31 k8s-2
192.168.8.32 k8s-3
1.3.4 防火墙配置
所有主机均需要操作。
关闭现有防火墙firewalld
systemctl disable firewalld
systemctl stop firewalld
1.3.5 SELINUX配置
所有主机均需要操作。修改SELinux配置需要重启操作系统。
setenforce 0
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

1.3.6 时间同步配置
所有主机均需要操作。最小化安装系统需要安装ntpdate软件。
yum -y install ntpdate
ntpdate time1.aliyun.com

crontab -e
添加:
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com
1.3.7 配置内核路由转发及网桥过滤
所有主机均需要操作。
添加网桥过滤及内核转发配置文件
vim /etc/sysctl.d/k8s.conf
添加:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

加载br_netfilter模块
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
查看是否加载
lsmod | grep br_netfilter

1.3.8 安装ipset及ipvsadm
所有主机均需要操作。
安装ipset及ipvsadm
yum -y install ipset ipvsadm

配置ipvsadm模块加载方式
添加需要加载的模块
cat > /etc/sysconfig/modules/ipvs.modules <
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

1.3.10 关闭SWAP分区
修改完成后需要重启操作系统,如不重启,可临时关闭,命令为
swapoff -a
永久关闭swap分区
vim /etc/fstab
在行首添加#注释掉
# /dev/mapper/centos-swap swap swap defaults 0 0

- Docker准备
2.1 Docker安装YUM源准备
使用阿里云开源软件镜像站。
wget
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-O /etc/yum.repos.d/docker-ce.repo
2.2 Docker安装
yum -y install docker-ce

2.3 启动Docker服务
systemctl enable --now docker
2.4 修改cgroup方式,添加国内镜像源
/etc/docker/daemon.json 默认没有此文件,需要单独创建
在/etc/docker/daemon.json添加如下内容
vim /etc/docker/daemon.json
添加:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
]
}
systemctl restart docker
参考国内镜像加速器列表(vpn连接访问):
2.5 cri-dockerd安装
直接拖包安装就好了
yum -y install
cri-dockerd-0.3.8-3.el7.x86_64.rpm

vim /usr/lib/systemd/system/cri-docker.service
修改第10行内容
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.k8s.io/pause:3.9 --container-runtime-endpoint fd://

systemctl start cri-docker
systemctl enable cri-docker

- kubernetes 1.28.2 集群部署
3.1 集群软件及版本说明(版本1.28.2,各个组件版本相同)
集群所有主机都安装:
Kubeadm
:
初始化集群、管理集群等
Kubelet
:
用于接收api-server指令,对pod生命周期进行管理
Kubectl
:
集群应用命令行管理工具
3.2 kubernetes YUM源准备
添加阿里云YUM源
cat > /etc/yum.repos.d/k8s.repo <
[kubernetes]
name=Kubernetes
enabled=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
EOF
3.3 集群软件安装
所有节点均可安装
查看指定版本
yum list kubeadm.x86_64 --showduplicates | sort -r
yum list kubelet.x86_64 --showduplicates | sort -r
yum list kubectl.x86_64 --showduplicates | sort -r
安装指定版本
yum -y install kubeadm-1.28.2-0 kubelet-1.28.2-0 kubectl-1.28.2-0

注:不指定版本时,将安装yum源中最新版本 #
yum -y install kubeadm kubelet kubectl
3.4 配置kubelet
为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。
vim /etc/sysconfig/kubelet
添加:
KUBELET_EXTRA_ARGS=
"--cgroup-driver=systemd"

设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet

3.5 集群镜像准备
查看集群所需的镜像,可使用VPN实现下载。
kubeadm config images list --kubernetes-version=v1.28.2
如果已提前下载导出为镜像文件,可复制后直接导入本地镜像库:
docker load -i k8s-1.28.2.tar

3.6 集群初始化(注意
--cri-socket
部分)
[root@
k8s-1 ~]# kubeadm init --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.8.30
--cri-socket unix:///var/run/cri-dockerd.sock
正常输出内容如下:
。。。 。。。
Your Kubernetes control-plane has initialized successfully!
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
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.8.30:6443 --token r9txum.lnoce3pph3sutu5f \
--discovery-token-ca-cert-hash sha256:fb010b6c37325dc3484216b16c0f06e404843bf060372e351bdfc9d75e7b3dfe

3.7 Worker节点加入群集:
3.7.1
在k8s-1节点上执行提示中的内容
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

3.7.2
在
所有worker节点
上执行加入群集命令:
# 复制提示中的内容,并在尾部添加cri-socket
kubeadm join 192.168.8.30:6443 --token r9txum.lnoce3pph3sutu5f \
--discovery-token-ca-cert-hash sha256:fb010b6c37325dc3484216b16c0f06e404843bf060372e351bdfc9d75e7b3dfe --cri-socket unix:///var/run/cri-dockerd.sock


注
:如果出现错误,不能加入集群,可先停止kubelet,清除状态信息,重新加入即可
示例:
systemctl stop kubelet
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock

重新配置群集即可
3.8 集群网络插件部署 calico
使用calico部署集群网络
3.8.1 应用operator资源清单文件:
[root@
k8s-1 ~]#
kubectl create -f
https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml

如果提前已下载,执行如下命令:
kubectl create -f tigera-operator.yaml
3.8.2 通过自定义资源方式安装:
[root@k8s-1 ~]#
wget
https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
如果拖包已下载,直接修改pod对应的网段地址
修改文件第13行,修改为使用kubeadm init ----pod-network-cidr对应的IP地址段
[root@k8s-1 ~]#
vim custom-resources.yaml
3.8.3 应用资源清单文件

可提前下载镜像并导入本地镜像库(只在k8s-1节点)

[root@k8s-1 ~]#
docker load < calico-typha.tar

[root@k8s-1 ~]#
docker load < calico_v3.25.1.tar

[root@k8s-1 ~]#
docker load < calico-apiserver.tar

[root@k8s-1 ~]#
kubectl create -f custom-resources.yaml
如果没有提前准备的镜像,需vpn连接,等待较长时间。。。
[root@k8s-1 ~]#
watch kubectl get pods -n calico-system

已经全部运行后,ctrl-C结束监控即可
[root@k8s-1 ~]#
kubectl get pods -n calico-system

- 验证集群可用性
4.1 查看所有的节点
[root@k8s-1 ~]#
kubectl get nodes

注:如果出现如下状态,说明calico网络插件未装好
[root@k8s-1 ~]#
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-1 NotReady control-plane 3m4s v1.28.2
k8s-2 NotReady 58s v1.28.2
k8s-3 NotReady 4s v1.28.2
4.2 查看集群健康情况
[root@k8s-1 ~]#
kubectl get cs

4.3 查看kubernetes集群pod运行情况
[root@k8s-1 ~]#
kubectl get pods -n kube-system

4.4 再次查看calico-system命名空间中pod运行情况
[root@k8s-1 ~]#
kubectl get pods -n calico-system

补充辅助操作:设置kubectl命令行工具自动补全功能
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

为了以后我们写yaml文件方便些,这里设置tab键空格个数
[root@master ~]#
vim .vimrc
set tabstop=2
[root@master ~]#
source .vimrc
