安装部署 Kubernetes(k8s)
2025/07/30
作者:博睿谷Eva
硬件配置要求
在开始安装 Kubernetes 之前,请确保你的服务器满足以下硬件要求:
CPU >= 2 核
硬盘 >= 20G
内存 >= 2G
节点数量建议为奇数(3, 5, 7, 9 等)(注:1 台机器也能搭建,未实际测试)
注意:以下命令除特殊要求外,其余都建议在 master 主机执行
一、安装(所有机器都要执行)
1. 执行以下命令安装必备插件
# tab 命令补全 yum install -y bash-completion wget vim-enhanced net-tools gcc
2. 将主机名指向本机 IP
主机名只能包含:字母、数字、-(横杠)、.(点)
设置主机名 hostnamectl set-hostname 主机名
3. 将节点加入到 hosts 中
cat >> /etc/hosts << EOF 192.168.157.156 n1 192.168.157.157 n2 192.168.157.158 master EOF
4. 设置时间同步
yum -y install ntpdate ntpdate ntp1.aliyun.com systemctl status ntpdate systemctl start ntpdate systemctl status ntpdate systemctl enable ntpdate
5. 关闭防火墙或者开通指定端口(这里使用关闭防火墙)
systemctl stop firewalld.service systemctl disable firewalld.service
6. 关闭 swap 交换空间
free -h sudo swapoff -a sudo sed -i 's/.*swap.*/#&/' /etc/fstab free -h
7. 关闭 selinux
getenforce cat /etc/selinux/config sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config cat /etc/selinux/config
8. 安装 docker , Containerd
# 删除 docker(如果有的话) sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装必备工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 加入 docker 源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装 docker sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 安装 containerd sudo yum install -y containerd # 停止 containerd sudo systemctl stop containerd.service # 生成并修改配置文件 sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak sudo containerd config default > $HOME/config.toml sudo cp $HOME/config.toml /etc/containerd/config.toml sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml # 将 containerd 加入开机自启 sudo systemctl enable --now containerd.service # 启动 docker sudo systemctl start docker.service # 将 docker 加入开机自启 sudo systemctl enable docker.service sudo systemctl enable docker.socket sudo systemctl list-unit-files | grep docker # 设置 docker 镜像加速 sudo mkdir -p /etc/docker # 镜像地址换成你自己的阿里云镜像地址 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://qbtm200u.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF systemctl daemon-reload systemctl restart docker docker info systemctl status docker.service systemctl status containerd.service
9. 添加阿里云 k8s 镜像仓库
cat </etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ # 是否开启本仓库 enabled=1 # 是否检查 gpg 签名文件 gpgcheck=0 # 是否检查 gpg 签名文件 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
10. 转发 IPv4 并让 iptables 看到桥接流量
cat >/etc/modules-load.d/k8s.conf </etc/sysctl.d/k8s.conf < 11. 安装 k8s
# 安装 1.27.1 版本 sudo yum install -y kubelet-1.27.1-0 kubeadm-1.27.1-0 kubectl-1.27.1-0 --disableexcludes=kubernetes --nogpgcheck # 安装最新版本(生产环境不建议) # sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --nogpgcheck systemctl daemon-reload sudo systemctl restart kubelet sudo systemctl enable kubelet二、启动
1. master 初始化(仅在 master 节点主机上执行)
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.157.133 --kubernetes-version=v1.27.1 # --image-repository 镜像加速地址,一般不动 # --apiserver-advertise-address master 节点IP地址,自己改 # --kubernetes-version kubernetes 版本,自己选择的什么版本就改成什么版本 # 初始化失败可以使用 kubeadm reset 重置 # 失败原因多半是因为网络问题,可以换个网络试试2. 初始化成功后执行(仅在 master 节点主机上执行)
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config3. 将 node 加入集群(仅在 node 节点主句执行)
不要直接复制,每个人不一样
# 执行成功后,会出现类似下列内容: kubeadm join 192.168.80.60:6443 --token f9lvrz.59mykzssqw6vjh32 \ --discovery-token-ca-cert-hash sha256:4e23156e2f71c5df52dfd2b9b198cce5db27c47707564684ea74986836900107 # 将控制台打印的这句复制到 node 节点主机上执行就行 # 如果忘记或者过期可以使用以下命令重新生成 kubeadm token create --print-join-command4. 查看集群状态(master 节点执行)
kubectl get nodes输出:
plaintext
NAME STATUS ROLES AGE VERSION master NotReady control-plane 7h21m v1.27.1 node1 NotReady7h20m v1.27.1 node2 NotReady 7h20m v1.27.1 可以看到所有节点都是 NotReady ,这是因为还没有配置网络
5. 配置网络(仅在 master 节点执行)
k8s 与 Calico 版本对应
Kubernetes 版本 | Calico 版本 | Calico 文档 |
---|---|---|
1.18、1.19、1.20 | 3.18 | |
1.19、1.20、1.21 | 3.19 | |
1.19、1.20、1.21 | 3.20 | |
1.20、1.21、1.22 | 3.21 | |
1.21、1.22、1.23 | 3.22 | |
1.21、1.22、1.23 | 3.23 | |
1.22、1.23、1.24 | 3.24 | |
1.23、1.24、1.25、1.26、1.27 | 3.25 |
下载(网址换成自己版本对应的即可)
wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml
下载不了的可以把后面网址复制到浏览器下载下来后在传到虚拟机
修改 calico.yaml 文件
vim calico.yaml # 在 - name: CLUSTER_TYPE 下方添加如下内容 - name: CLUSTER_TYPE ##4567 value: "k8s,bgp" # 下方为新增内容 - name: IP_AUTODETECTION_METHOD value: "interface=ens160" ####master网卡名称
配置网络
kubectl apply -f calico.yaml
6. 再次查看节点信息
- 查看 node 状态
kubectl get nodes
输出:
plaintext
NAME STATUS ROLES AGE VERSION master NotReady control-plane 21m v1.27.1 node1 NotReady20m v1.27.1 node2 NotReady 20m v1.27.1
查看 pod 状态
kubectl get pods --all-namespaces -o wide
输出:
可以看到正在初始化,现在稍等一段时间(多久看网络情况)
初始化失败大部分情况也是因为网络原因,建议换个网络试试
7. 初始化成功
查看 node 状态
kubectl get nodes
输出:
plaintext
NAME STATUS ROLES AGE VERSION master Ready control-plane 7h21m v1.27.1 node1 Ready7h20m v1.27.1 node2 Ready 7h20m v1.27.1
查看 pod 状态
kubectl get pods --all-namespaces -o wide
输出:
8. k8s 命令补全
! grep -q kubectl "$HOME/.bashrc" && echo "source /usr/share/bash-completion/bash_completion" >>"$HOME/.bashrc" ! grep -q kubectl "$HOME/.bashrc" && echo "source <(kubectl completion bash)" >>"$HOME/.bashrc" ! grep -q kubeadm "$HOME/.bashrc" && echo "source <(kubeadm completion bash)" >>"$HOME/.bashrc" ! grep -q crictl "$HOME/.bashrc" && echo "source <(crictl completion bash)" >>"$HOME/.bashrc" source "$HOME/.bashrc"
9. 常用命令
# 获取节点 kubectl get nodes -o wide # 实时查询nodes状态 watch kubectl get nodes -o wide # 获取pod kubectl get pods --all-namespaces -o wide # 查看镜像列表 kubeadm config images list # 节点加入集群 kubeadm token create --print-join-command # 描述node kubectl describe node k8s-master # 描述pod kubectl describe pod kube-flannel-ds-hs8bq --namespace=kube-system
三、测试
1. 创建一个 nginx 来测试
kubectl create deployment nginx --image=nginx
2. 查看状态
kubectl get pods -o wide
输出
等待一段时间,等 ContainerCreating 变成 Running 时进行下一步
3. 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
4. 查看 pos 及服务信息
kubectl get pod,svc
输出
5. 在浏览器中访问
http://192.168.42.150:32403
地址根据你自己的主机变化,端口上面输出的信息中 PORT (S) 这一栏会有
yum install -y bash-completion
-
开设课程 开班时间 在线报名OCP2025.04.26
在线报名
HCIP-AI Solution2025.04.26在线报名
HCIE-openEuler2025.05.03在线报名
RHCA-CL2602025.05.04在线报名
HCIP-Cloud2025.05.10在线报名
PGCM直通车2025.05.10在线报名
HCIA-Datacom(晚班)2025.05.19在线报名
HCIA-Sec2025.06.07在线报名
RHCA-RH4422025.06.07在线报名
PMP2025.06.10在线报名
HCIA-Datacom2025.06.14在线报名
HCIE-AI Solution2025.06.14在线报名
HCIE-Datacom2025.06.14在线报名
HCIP-Datacom(晚班)2025.06.16在线报名
OCM2025.06.21在线报名
HCIE-Cloud2025.06.21在线报名
HCIP-Sec2025.06.21在线报名
HCIE-Bigdata2025.06.28在线报名
RHCE2025.06.28在线报名
HCIE-Datacom考前辅导2025.07.05在线报名
HCIP-Datacom深圳2025.07.19在线报名
CISP2025.07.19在线报名
HCIA-Datacom(晚班)2025.07.21在线报名
RHCA-RH4362025.07.26在线报名
OCP2025.07.26在线报名
HCIE-Sec2025.08.09在线报名
HCIA-AI Solution2025.08.16在线报名
HCIP-Datacom(晚班)2025.08.25在线报名
RHCA-RH3582025.09.06在线报名
PMP2025.09.16在线报名
HCIE-Datacom2025.09.06在线报名
HCIA-AI Solution2025.09.27在线报名
HCIA-Datacom2025.09.27在线报名
PGCM直通车2025.10.11在线报名
RHCA-DO3742025.10.11在线报名
HCIA-Sec2025.10.11在线报名
RHCE2025.10.18在线报名
HCIP-Datacom2025.11.08在线报名
HCIP-Sec2025.11.08在线报名
RHCA-CL2602025.11.15在线报名
OCP2025.11.15在线报名
HCIE-Sec2025.12.13在线报名
HCIE-Datacom2026.01.10在线报名



