前言

初次学习,理解并不是很清楚


准备环境

服务器规划:

角色 IP地址
k8s-master 192.168.11.130
k8s-node1 192.168.11.134
k8s-node2 192.168.11.135

服务器要求:

建议最小硬件配置:2核CPU、2G内存、20G硬盘。
服务器可以访问互联网,会联网下载镜像。
软件环境:

软件 版本
操作系统 CentOS7.9_x64
Docker 24.0.0(CE)
Kubernetes 1.28

初始化配置

关闭 Selinux

1
2
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时

关闭 Swap

1
2
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久

设置主机名

1
hostnamectl set-hostname k8s-master

确保网络桥接的数据包经过 Iptables 处理,启用相关的内核参数

1
2
3
4
5
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效

安装 Docker

下载安装

1
2
3
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker

配置镜像下载加速器和设置 Cgroup 驱动

这一步可以参考最新的docker可用镜像源设置

1
2
3
4
5
6
7
8
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl restart docker
docker info

安装 cri-dockerd(Docker 与 Kubernetes 通信的中间程序)

测试最新版本0.3.15安装在centos7.9缺少依赖,但是显示的依赖包已安装,安装旧一版本0.3.14没什么问题,可能版本和我最简的centos7.9有些问题,下载地址为:
https://github.com/Mirantis/cri-dockerd/releases

1
2
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

指定依赖镜像地址为国内镜像地址:

修改ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://部分,添加以下参数:

1
2
vi /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
1
2
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

部署 Kubernetes 集群

添加阿里云 YUM 软件源

1
2
3
4
5
6
7
8
9
10
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.ali
yun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装 kubeadm,kubelet 和 kubectl

我一般默认安装最新版yum install -y kubelet kubeadm kubectl,这里我指定下版本

1
2
yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2
systemctl enable kubelet

初始化 Master 节点

1
2
3
4
5
6
7
kubeadm init \
--apiserver-advertise-address=192.168.11.128 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock

初始化完成后,根据提示信息,拷贝 kubectl 工具认证文件到默认路径:

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

使用 kubectl 工具查看节点状态:

1
kubectl get nodes

ps:由于网络插件还没有部署,节点会处于“NotReady”状态

将 Node 节点加入集群

1
kubeadm join 192.168.11.130:6443 --token pt332w.pz2sldn46h9ynfsw         --discovery-token-ca-cert-hash sha256:b6bdbc14bee762e5a7cfc24aa60cc842077180ae6595eb68b09d0333243cfa0c --cri-socket=unix:///var/run/cri-dockerd.sock

安装网络组件

Pod 网络:Kubernetes 需要一个 Pod 网络插件来管理集群中的网络通信。你可以选择一个适合你环境的网络插件(如 Flannel、Calico、Weave 等),并使用 kubectl 命令来部署。

这里使用 Calico 作为 Kubernetes 的网络插件,负责集群中网络通信。
创建 Calico 网络组件的资源:

1
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

配置安全策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vim network-policy.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- {}
egress:
- {}

kubectl apply -f network-policy.yaml

应用完成后,等待 5 分钟后,查看 Pod 运行状态:

1
kubectl get pods -n kube-system

如果出现问题,可能是还未下载完,也可以查看日志排查

1
kubectl logs -n kube-system <pod-name>

ps:如果 Pod 处于“ContainerCreating”状态说明在下载镜像中,需耐心等待

安装 Dashboard

Dashboard 是官方提供的一个 UI,可用于基本管理 K8s 资源。

安装

1
2
kubectl apply -f kubernetes-dashboard.yaml
kubectl get pods -n kubernetes-dashboard

浏览器访问“https://<节点 IP 地址>:30001”,将看到 Dashboard 登录界面。

创建服务账号并授权管理员权限:

1
2
3
4
5
6
7
# 创建用户
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --
serviceaccount=kubernetes-dashboard:dashboard-admin
# 获取用户 Token
kubectl create token dashboard-admin -n kubernetes-dashboard

使用输出的 Token 登录 Dashboard,将进入到首页
至此,k8s部署完成