我缺的U盘:\soft这一块谁来给我补啊?

什么是 Kubernetes?

Kubernetes(简称 K8s )是一个开源的容器编排 平台,用于自动化部署、扩展和管理容器化应用。它支持自动扩展、负载均衡、服务发现等功能,让容器管理更高效。

Kubernetes 架构

  • 控制平面 (Control Plane) :负责管理集群和工作节点,维护集群状态。
  • 工作节点 (Work Plane) :执行控制平面分配的任务。

Kubernetes 结构(从大到小)

  • Cluster 集群 :一个完整的 Kubernetes 区域。
  • Node 节点 :一台或多台服务器,提供资源运行容器。
  • Pod 节点集 :一个或多个容器运行的区域,共享资源
  • Container 容器 :运行应用的最小单元。

Kubernetes 组件

  1. 控制平面组件

    • kube-apiserver :提供 API 接口,是控制平面的前端。
    • etcd :存储集群的所有配置数据。
    • kube-scheduler :调度 Pod 到合适的节点。
    • kube-controller-manager :运行控制器进程(如节点控制器、副本控制器)。
    • cloud-controller-manager :与云服务提供商交互,管理云资源。
  2. 节点组件

    • kubelet :确保容器在 Pod 中运行。
    • kube-proxy :维护网络规则,实现服务和 Pod 的网络通信。
    • 容器运行时 :如 Docker、containerd,负责运行容器。

控制平面初始化

这部分只要涉及外部访问的都得威法饭醉,自行解决

完成一次之后就可以离线配置了!

官方仓库 (本地源步骤)

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
EOF

curl https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo > /etc/yum.repos.d/docker-ce.repo

下载到本地(本地源步骤)

yum install -y --downloadonly --downloaddir=/root kubeadm kubectl kubelet
yum install -y --downloadonly --downloaddir=/root containerd.io

[root@localhost ~]# zip kubernetes.zip *
  adding: conntrack-tools-1.4.7-2.el9.x86_64.rpm (deflated 7%)
  adding: containerd.io-1.7.24-3.1.el9.x86_64.rpm (deflated 0%)
  adding: container-selinux-2.232.1-1.el9.noarch.rpm (deflated 24%)
  adding: cri-tools-1.32.0-150500.1.1.x86_64.rpm (deflated 0%)
  adding: kubeadm-1.32.0-150500.1.1.x86_64.rpm (deflated 0%)
  adding: kubectl-1.32.0-150500.1.1.x86_64.rpm (deflated 0%)
  adding: kubelet-1.32.0-150500.1.1.x86_64.rpm (deflated 0%)
  adding: kubernetes-cni-1.6.0-150500.1.1.x86_64.rpm (deflated 0%)
  adding: libnetfilter_cthelper-1.0.0-22.el9.x86_64.rpm (deflated 26%)
  adding: libnetfilter_cttimeout-1.0.0-19.el9.x86_64.rpm (deflated 26%)
  adding: libnetfilter_queue-1.0.5-1.el9.x86_64.rpm (deflated 22%)

安装

[root@localhost ~]# rpm -ivh *
  • -i 安装 (必须的)
  • -v 详细信息
  • -h 显示进度

前置操作

开机自启

systemctl enable --now kubelet.service containerd.service 

关闭防火墙

systemctl disable --now firewalld.service

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0

关闭swap分区

swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

内核参数

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

containerd配置 /etc/containerd/config.toml

# 注释掉这一行
disabled_plugins = ["cri"]

# 重启
systemctl restart containerd.service

拉取依赖镜像(本地源步骤)

kubeadm config images pull

for image in $(crictl images -q); do
  crictl save -o ${image//\//_}.tar $image
done

导入镜像

for tarfile in *.tar; do
  ctr -n k8s.io images import $tarfile
done

初始化

kubeadm init

如果失败,重试要这样:

kubeadm reset
rm -rf /etc/kubernetes/
rm -rf /var/lib/etcd/
systemctl restart kubelet containerd
kubeadm init

完成

Your Kubernetes control-plane has initialized successfully!                                 
                                                                                            
To start using your cluster, you need to run the following as a regular user:               
                                                                                            
  mkdir -p $HOME/.kube                                                                      
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config                                  
  sudo chown $(id -u):$(id -g) $HOME/.kube/config                                           
                                                                                            
Alternatively, if you are the root user, you can run:                                       
                                                                                            
  export KUBECONFIG=/etc/kubernetes/admin.conf                                              
                                                                                            
You should now deploy a pod network to the cluster.                                         
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:                 
  https://kubernetes.io/docs/concepts/cluster-administration/addons/                        
                                                                                            
Then you can join any number of worker nodes by running the following on each as root:      
                                                                                            
kubeadm join 192.168.10.3:6443 --token 9oavet.qiku5ahhlb2c6nwj \
        --discovery-token-ca-cert-hash sha256:d2d3c51f1923264f7158fce3ebf99f5fc22724e46819963e2a17f914ea318181

节点服务器加入集群

执行控制平面初始化最后一个输出的命令(以你自己的为准)

kubeadm join 192.168.10.3:6443 --token 9oavet.qiku5ahhlb2c6nwj \
        --discovery-token-ca-cert-hash sha256:d2d3c51f1923264f7158fce3ebf99f5fc22724e46819963e2a17f914ea318181