前言
准备环境
服务器规划:
角色 |
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 工具查看节点状态:
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部署完成