kubernetes
集群图例


Master 节点四大核心组件
我们可以把 Master 节点想象成一家物流公司 ,这四个组件就是其中的关键角色:
| 组件名称 | 角色比喻 | 核心职责 | 关键特性 |
|---|---|---|---|
| API Server(API 服务器) | 前台接待/总接线员 | 集群的唯一入口。处理所有 REST 请求(如 kubectl 命令),是各组件之间通信的枢纽。 |
单点入口:所有操作都必须经过它。 认证授权:负责安全校验。 |
| etcd(镜像仓库) | 中央数据库/仓库账本 | 保存集群的所有配置数据和状态(如 Pod 定义、节点信息)。 | 唯一真相源:只有 API Server 能直接和它交互。 持久化:数据丢失意味着集群"失忆"。 |
| Scheduler(调度器) | 调度员/派单员 | 负责将未绑定的 Pod 分配到合适的 Worker 节点上。 | 资源评估:根据 CPU、内存、亲和性策略等决定 Pod 跑在哪。 |
| Controller Manager(控制器管理器) | 总管理/监控室 | 确保集群的实际状态与期望状态一致。 | 闭环控制:比如发现 Pod 少了就自动补上。 多种控制器:包含节点控制器、副本控制器等。 |
node核心组件
- kubelet 负责听从指令并汇报
- kube-proxy 负责网络流量
- Runtime 负责运行容器进程
Kubernetes 核心组件服务端口
| 软件/组件名称 | 端口范围 | 用途描述 |
|---|---|---|
| kubernetes-api | 6443 | 所有组件接口服务 (HTTPS) |
| etcd | 2379-2380 | 核心数据库(Peer通信端口2380,Client通信端口2379) |
| kube-scheduler | 10259 | 调度服务(HTTPS) |
| kube-controller-manager | 10257 | 控制器管理服务(HTTPS) |
| kubelet | 10250 | 节点代理服务(Kubelet API) |
| kube-proxy | 10256 | 网络通信与负载均衡 (HTTPS) |
kubernetes 安装
主机清单
| 主机名 | IP地址 | 最低配置 |
|---|---|---|
| harbor | 192.168.88.240 | 2CPU,4G内存 |
| master | 192.168.88.50 | 2CPU,4G内存 |
| node-0001 | 192.168.88.51 | 2CPU,2G内存 |
| node-0002 | 192.168.88.52 | 2CPU,2G内存 |
| node-0003 | 192.168.88.53 | 2CPU,2G内存 |
安装控制节点
1、配置软件仓库
root@server s4\]# rsync -av docker/ 192.168.88.240:/var/ftp/rpms/docker/ root@192.168.88.240's password: \[root@server s4\]# rsync -av kubernetes/packages/ 192.168.88.240:/var/ftp/rpms/k8s/ root@192.168.88.240's password: # 更新 repodata \[root@server s4\]# ssh 192.168.88.240 root@192.168.88.240's password: \[root@harbor \~\]# createrepo --update /var/ftp/rpms/ ##### 2、系统环境配置 # 配置安装源 \[root@master \~\]# vim /etc/yum.repos.d/k8s.repo > \[k8s
name=Rocky Linux $releasever - Kubernetes
baseurl="ftp://192.168.88.240/rpms"
enabled=1
gpgcheck=0
禁用 firewall 和 swap
root@master \~\]# sed '/swap/d' -i /etc/fstab \[root@master \~\]# swapoff -a \[root@master \~\]# dnf remove -y firewalld-\* ##### 3、安装软件包 \[root@master \~\]# vim /etc/hosts > 192.168.88.240 harbor > > 192.168.88.50 master > > 192.168.88.51 node-0001 > > 192.168.88.52 node-0002 > > 192.168.88.53 node-0003 \[root@master \~\]# **dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc**  \[root@master \~\]# **containerd config default \>/etc/containerd/config.toml** \[root@master \~\]#**vim /etc/containerd/config.toml** > 61: sandbox_image = "harbor:443/k8s/pause:3.9" > > 125: SystemdCgroup = true > > 154 行新插入: > > \[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"
endpoint = ["https://192.168.88.240:443"]
plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"
endpoint = ["https://192.168.88.240:443"]
plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.88.240:443".tls
insecure_skip_verify = true
root@master \~\]# **systemctl enable --now kubelet containerd** ##### 4、配置内核参数 # 加载内核模块 \[root@master \~\]# **vim /etc/modules-load.d/containerd.conf** > br_netfilter > > xt_conntrack \[root@master \~\]# **systemctl start systemd-modules-load.service** # 设置内核参数 \[root@master \~\]# **vim /etc/sysctl.d/99-kubernetes-cri.conf** > net.ipv4.ip_forward = 1 > > net.bridge.bridge-nf-call-iptables = 1 > > net.bridge.bridge-nf-call-ip6tables = 1 > > net.netfilter.nf_conntrack_max = 1000000 \[root@master \~\]# **sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf**#立即加载并生效内核参数配置。 ##### 5、导入 k8s 镜像 * **kubernetes/init 目录到 master** **`rsync -av kubernetes/init 192.168.88.50:/root/`** ###### **5.1 安装部署 docker** \[root@master \~\]# **dnf install -y docker-ce** \[root@master \~\]# **vim /etc/docker/daemon.json** > { > > "registry-mirrors":\["https://harbor:443"\], > > "insecure-registries":\["harbor:443"
}
root@master \~\]# **systemctl enable --now docker**
\[root@master \~\]# **docker info**
**5.2 上传镜像到 harbor 仓库**
\[root@master \~\]# **docker login harbor:443**
> Username: \<登录用户\>
>
> Password: \<登录密码\>
>
> Login Succeeded
\[root@master \~\]#**docker load -i init/v1.29.2.tar.xz**
\[root@master \~\]# **docker images\|while read i t _;do**
**\[\[ "${t}" == "TAG" \]\] \&\& continue**
**\[\[ "${i}" =\~ \^"harbor:443/".+ \]\] \&\& continue**
**docker tag ${i}:${t} harbor:443/k8s/${i##\*/}:${t}**
**docker push harbor:443/k8s/${i##\*/}:${t}**
**docker rmi ${i}:${t} harbor:443/k8s/${i##\*/}:${t}**
**done**
##### 6、设置 Tab 键
\[root@master \~\]# **source \<(kubeadm completion bash\|tee**
**/etc/bash_completion.d/kubeadm)**
\[root@master \~\]# **source \<(kubectl completion bash\|tee /etc/bash_completion.d/kubectl)**
##### 7、master 安装
\[root@master \~\]# **vim /root/init/init.yaml**
> 13: advertiseAddress: 192.168.88.50
# 测试系统环境
\[root@master \~\]# **kubeadm init --config=init/init.yaml --dry-run 2\>error.log**
\[root@master \~\]# **cat error.log**
# 主控节点初始化
\[root@master \~\]# **rm -rf error.log /etc/kubernetes/tmp**
\[root@master \~\]# **kubeadm init --config=init/init.yaml \|tee init/init.log**
# 管理授权
\[root@master \~\]# **mkdir -p $HOME/.kube**
\[root@master \~\]# **sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config**
\[root@master \~\]# **sudo chown $(id -u):$(id -g) $HOME/.kube/config**
# 验证安装结果
\[root@master \~\]# **kubectl get nodes**
> NAME STATUS ROLES AGE VERSION
>
> master NotReady control-plane 19s v1.29.2
#### 安装网络插件
**kubernetes/plugins 目录到 master**
**`rsync -av kubernetes/plugins 192.168.88.50:/root/`**
##### 上传镜像
\[root@master \~\]# **cd plugins/calico**
\[root@master calico\]# **docker load -i calico.tar.xz** #calico插件镜像需下载可翻墙官方源下载
\[root@master calico\]# **docker images\|while read i t _;do**
**\[\[ "${t}" == "TAG" \]\] \&\& continue**
**\[\[ "${i}" =\~ \^"harbor:443/".+ \]\] \&\& continue**
**docker tag ${i}:${t} harbor:443/plugins/${i##\*/}:${t}**
**docker push harbor:443/plugins/${i##\*/}:${t}**
**docker rmi ${i}:${t} harbor:443/plugins/${i##\*/}:${t}**
**done**
##### 安装 calico
\[root@master calico\]# **sed -ri 's,\^(\\s\*image: )(.\*/)?(.+),\\1harbor:443/plugins/\\3,' calico.yaml**
> 4642: image: docker.io/calico/cni:v3.26.4
>
> 4670: image: docker.io/calico/cni:v3.26.4
>
> 4713: image: docker.io/calico/node:v3.26.4
>
> 4739: image: docker.io/calico/node:v3.26.4
>
> 4956: image: docker.io/calico/kube-controllers:v3.26.4
\[root@master calico\]# **kubectl apply -f calico.yaml**
\[root@master calico\]# kubectl get nodes
> NAME STATUS ROLES AGE VERSION
>
> master Ready control-plane 23m v1.29.2
#### 安装计算节点
##### 1、获取凭证
# 查看 token
\[root@master \~\]# kubeadm token list
> TOKEN TTL EXPIRES
>
> abcdef.0123456789abcdef 23h 2022-04-12T14:04:34Z
# 删除 token
\[root@master \~\]# kubeadm token delete abcdef.0123456789abcdef
> bootstrap token "abcdef" deleted
# 创建 token 并记录返回的命令
\[root@master \~\]# **kubeadm token create --ttl=0 --print-join-command**
> kubeadm join \
root@master \~\]# **openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \|openssl rsa -pubin -outform der \|openssl dgst -sha256 -hex**
##### 2、node 安装
\[root@node \~\]# 控制节点(安装步骤 2)
\[root@node \~\]# 控制节点(安装步骤 3)
\[root@node \~\]# 控制节点(安装步骤 4)
\[root@node \~\]#**kubeadm join 192.168.88.50:6443 --token \<你的token\> --discovery-token-ca-cert-hash sha256:\