简单安装k8s
简单安装k8s
1. 设置主机名与 hosts 解析
bash
# Master 节点
hostnamectl set-hostname master
echo "192.168.8.92 master" >> /etc/hosts
# Node1 节点
hostnamectl set-hostname node1
echo "192.168.8.93 node1" >> /etc/hosts
# Node2 节点
hostnamectl set-hostname node2
echo "192.168.8.94 node2" >> /etc/hosts
在 所有节点 的 /etc/hosts 中追加全部三台的信息(或至少保证彼此能通过主机名解析):
cat >> /etc/hosts <<EOF
192.168.8.92 master
192.168.8.93 node1
192.168.8.94 node2
EOF
关闭防火墙,或者开启相关端口
systemctl stop firewalld
systemctl disable firewalld
禁用 SELinux(临时+永久)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
禁用 swap(kubelet 要求)
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
加载内核模块及调整 sysctl 参数
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
6安装 containerd 作为容器运行时
# 安装依赖
dnf install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker CE 仓库(containerd 从中获取)
#dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 containerd
dnf install -y containerd.io
# 生成默认配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改配置,使用 systemd cgroup 驱动
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启 containerd
systemctl restart containerd
systemctl enable containerd
systemctl status containerd
7. 安装 kubeadm、kubelet、kubectl
添加 Kubernetes 官方仓库(兼容 Rocky Linux 9 / RHEL 9):
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.36/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.36/rpm/repodata/repomd.xml.key
EOF
#安装
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 启动 kubelet(但此时还未初始化,会循环重启,正常)
systemctl enable --now kubelet
注:上述 v1.36 为当前稳定版本,可根据需要更换版本号(如 v1.31)。
二、Master 节点初始化
仅在 master(192.168.8.92)上执行。
修改 containerd 配置 (config.toml)
编辑 containerd 的主配置文件
获取默认配置文件
containerd config default > /etc/containerd/config.toml
配置文件:
vim /etc/containerd/config.toml
[plugins.'io.containerd.cri.v1.images'.pinned_images]
sandbox = 'registry.k8s.io/pause:3.10.1'
修改为
[plugins.'io.containerd.cri.v1.images'.pinned_images]
sandbox = 'registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.2'
systemctl restart containerd
#vim /etc/containerd/config.toml
#如果直接修改的,需要做这步操作
#检查 disabled_plugins 列表:定位到文件中的 disabled_plugins 列表。如果发现其中有 "cri",这是导致问题的直接原因。
#移除 "cri" 参数:从列表中移除 "cri" 条目。如果整个 disabled_plugins 列表仅包含 "cri",可以将其清空:disabled_plugins = []
#
#修改配置后,必须完全重启 containerd 服务以使更改生效。
#手动编辑 /etc/containerd/config.toml,在 disabled_plugins 列表的中括号 [] 内移除 "cri" 字段,然后重启服务
systemctl restart containerd
systemctl status containerd
1. 预拉取所需镜像
#kubeadm config images pull
#kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
kubeadm config images pull --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
下面为,上面命令自动下载的内容
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.36.1
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.36.1
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.36.1
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.36.1
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.14.2
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.2
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.6.8-0
2. 初始化集群
#kubeadm init \
# --apiserver-advertise-address=192.168.8.92 \
#--control-plane-endpoint=master \
# --pod-network-cidr=10.244.0.0/16 \
# --kubernetes-version=v1.36.1 # 替换为实际安装的版本
sudo kubeadm init --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.8.92 \
--control-plane-endpoint=master \
--pod-network-cidr=10.244.0.0/16 \
--kubernetes-version=v1.36.1 # 替换为实际安装的版本
参数说明:
--apiserver-advertise-address:API Server 监听的 IP(Master 地址)
--control-plane-endpoint:控制平面统一入口(使用主机名或 VIP)
--pod-network-cidr:Pod 网络范围(Calico 默认使用 10.244.0.0/16)
失败处理方案:
kubeadm reset -f # 清除之前失败的初始化残留
rm -rf /etc/cni/net.d # 清理可能残留的 CNI 配置
systemctl restart containerd
3. 配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装 Calico 网络插件
#kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/calico.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/calico.yaml
sed -i 's#docker.io/#docker.m.daocloud.io/#g' calico.yaml
kubectl apply -f calico.yaml
# 持续观察 Pod 状态,直到所有 Pod 都变为 Running
kubectl get pods --all-namespaces -w
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-99f87db8d-twwp2 1/1 Running 0 4m50s
kube-system calico-node-ndk8b 1/1 Running 0 4m50s
kube-system coredns-69f5d4fb89-lv8z2 1/1 Running 0 55m
kube-system coredns-69f5d4fb89-wdvzm 1/1 Running 0 55m
kube-system etcd-master 1/1 Running 1 55m
kube-system kube-apiserver-master 1/1 Running 1 55m
kube-system kube-controller-manager-master 1/1 Running 1 55m
kube-system kube-proxy-zx7jb 1/1 Running 0 55m
kube-system kube-scheduler-master 1/1 Running 1 55m
[root@master /]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 56m v1.36.1
#master和node节点1和node2节点2都要改
#获取默认配置文件
#containerd config default > /etc/containerd/config.toml
#把节点1和节点2修改vim /etc/containerd/config.toml
配置文件:
vim /etc/containerd/config.toml
[plugins.'io.containerd.cri.v1.images'.pinned_images]
sandbox = 'registry.k8s.io/pause:3.10.1'
修改为
[plugins.'io.containerd.cri.v1.images'.pinned_images]
sandbox = 'registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.2'
#把里面的SystemdCgroup = false改成true
#[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
SystemdCgroup = true
systemctl restart containerd
5. 获取加入集群的 Token(供 Worker 节点使用)
初始化成功后会输出类似以下内容,请保存 kubeadm join 命令:
#kubeadm join master:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
如果遗忘,可在 Master 上重新生成:
kubeadm token create --print-join-command
输入上面命令后,回显下面内容
kubeadm join master:6443 --token dmcw5t.oi7hx2itt2gppmbk --discovery-token-ca-cert-hash sha256:1b7711a55c25fa1ecb89ee1b80ce0028add28ec1070a08bf136666ca571dbd54
在 node1(192.168.8.93)和 node2(192.168.8.94)上执行上一步得到的 kubeadm join 命令
确保 worker 节点能够解析 master 主机名(已在 /etc/hosts 中配置)。
加入成功后,在 Master 上查看节点状态:
kubectl get nodes
#效果如下:
#[root@master containerd]# kubectl get node
#NAME STATUS ROLES AGE VERSION
#master Ready control-plane 2d1h v1.36.1
#node1 Ready <none> 55m v1.36.1
#输出应显示所有节点为 Ready(等待约 1-2 分钟,网络插件部署完成)。
#[root@master containerd]# kubectl get pods -A
#NAMESPACE NAME READY STATUS RESTARTS AGE
#kube-system calico-kube-controllers-99f87db8d-twwp2 1/1 Running 0 47h
#kube-system calico-node-ndk8b 1/1 Running 0 47h
#kube-system calico-node-trjcf 0/1 Init:2/3 1 (27s ago) 42m
#kube-system coredns-69f5d4fb89-lv8z2 1/1 Running 0 2d
#kube-system coredns-69f5d4fb89-wdvzm 1/1 Running 0 2d
#kube-system etcd-master 1/1 Running 1 2d
#kube-system kube-apiserver-master 1/1 Running 1 2d
#kube-system kube-controller-manager-master 1/1 Running 1 2d
#kube-system kube-proxy-vz2xh 1/1 Running 0 42m
#kube-system kube-proxy-zx7jb 1/1 Running 0 2d
#kube-system kube-scheduler-master 1/1 Running 1 2d
#等待完后,查看结果就全部running
#[root@master containerd]# kubectl get pods -A
#NAMESPACE NAME READY STATUS RESTARTS AGE
#kube-system calico-kube-controllers-99f87db8d-twwp2 1/1 Running 0 47h
#kube-system calico-node-ndk8b 1/1 Running 0 47h
#kube-system calico-node-trjcf 1/1 Running 0 42m
#kube-system coredns-69f5d4fb89-lv8z2 1/1 Running 0 2d
#kube-system coredns-69f5d4fb89-wdvzm 1/1 Running 0 2d
#kube-system etcd-master 1/1 Running 1 2d
#kube-system kube-apiserver-master 1/1 Running 1 2d
#kube-system kube-controller-manager-master 1/1 Running 1 2d
#kube-system kube-proxy-vz2xh 1/1 Running 0 42m
#kube-system kube-proxy-zx7jb 1/1 Running 0 2d
#kube-system kube-scheduler-master 1/1 Running 1 2d
命令详解
# 查看集群中的所有节点
kubectl get nodes 查看
#部署nginx,以及设置后面的1.31.1版本号
kubectl create deployment my-nginx --image=nginx:1.31.1
#使用国内仓库,部署nginx
kubectl create deployment my-nginx --image=registry.cn-hangzhou.aliyuncs.com/google_containers/nginx:1.31.1
# 查看 Pod 是否 Running
kubectl get pods
#详细查看 Pod 是否 Running
#kubectl get pods -A
# 获取更详细的信息
kubectl describe pod my-nginx-xxxxx # Pod 名称从上面命令kubectl get pods获得
#删除Deployment
#kubectl delete deployment my-nginx
[root@master docker]# kubectl delete deployment my-nginx
deployment.apps "my-nginx" deleted from default namespace
浙公网安备 33010602011771号