# 更新环境,方便拉最新包 yum update -y cat <<EOF >> /etc/hosts 10.0.0.123 master01 10.0.0.124 node01 10.0.0.125 node02 EOF #检查 cat /etc/hosts
# 检查 firewalld 服务和 SELinux 状态 systemctl status firewalld.service getenforce # 临时停止 firewalld 服务和设置 SELinux 宽容模式 systemctl stop firewalld setenforce 0 # 禁用 firewalld 服务 systemctl disable firewalld # 永久禁用 SELinux sed -i '/^SELINUX=/ c SELINUX=disabled' /etc/selinux/config # 验证 firewalld 和 SELinux 设置是否生效 systemctl status firewalld.service getenforce cat /etc/selinux/config | grep ^SELINUX= 输出[root@master01 ~]$ cat /etc/selinux/config | grep ^SELINUX= SELINUX=disabled 就是对的
# 选择 chrony:如果需要快速同步时间、适应不稳定的网络连接、在虚拟机中使用、或需要高精度时间同步,chrony 是一个更好的选择。 # 选择 ntpd:如果你需要一个成熟、稳定的解决方案,并且有复杂的时间同步需求,或者你的环境已经在使用 ntpd,那么 ntpd 可能是一个更好的选择。 # 安装 chrony yum install chrony -y # 启动并启用 chronyd 服务 systemctl start chronyd systemctl enable chronyd # 编辑 /etc/chrony.conf 文件,添加或修改 NTP 服务器配置,看下文件中有没有,默认是有的 cat <<EOF >> /etc/chrony.conf server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst EOF # 重启 chronyd 服务以应用配置更改 systemctl restart chronyd # 验证时间同步状态 这个需要几分钟,等着就行 chronyc tracking ## 成功标志 [root@master01 ~]$ chronyc tracking Reference ID : CA701FC5 (dns2.synet.edu.cn) Stratum : 2 Ref time (UTC) : Fri Jul 05 01:28:02 2024 System time : 0.001123869 seconds fast of NTP time Last offset : +0.001983812 seconds RMS offset : 0.003336797 seconds Frequency : 51.989 ppm slow Residual freq : -0.029 ppm Skew : 8.368 ppm Root delay : 0.048936486 seconds Root dispersion : 0.001556756 seconds Update interval : 65.3 seconds Leap status : Normal [root@master01 ~]$
# 注释掉 /etc/fstab 文件中与 swap 相关的行 sed -i '/swap/ s/^/#/' /etc/fstab # 临时禁用所有的 swap 分区 swapoff -a # 验证 swap 是否已被禁用 free -h
# 设置 Kubernetes 和 Containerd 相关内核参数 bash -c 'cat <<EOF >> /etc/sysctl.d/99-kubernetes.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF' sysctl --system # 加载必要的内核模块 sudo modprobe overlay sudo modprobe br_netfilter
# 安装ipset和ipvsadm yum install ipset ipvsadm -y # 创建并运行加载模块的脚本 bash -c 'cat <<EOF > /etc/sysconfig/modules/ipvs.modules #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF' chmod +x /etc/sysconfig/modules/ipvs.modules /bin/bash /etc/sysconfig/modules/ipvs.modules # 验证结果 lsmod | grep -e ip_vs -e nf_conntrack_ipv4 成功的标志 [root@master01 ~]$ # 验证结果 [root@master01 ~]$ lsmod | grep -e ip_vs -e nf_conntrack_ipv4 ip_vs_sh 12688 0 ip_vs_wrr 12697 0 ip_vs_rr 12600 0 ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr nf_conntrack 143411 1 ip_vs libcrc32c 12644 3 xfs,ip_vs,nf_conntrack [root@master01 ~]$
# yum仓库 # baseurl:指定了 Kubernetes 的 YUM 仓库地址,这里使用的是 v1.30 版本的稳定版本。 # gpgkey:指定了 YUM 仓库的 GPG 密钥,用于验证下载的软件包。 # exclude:指定了在安装时要排除的软件包列表,这些软件包不会被安装。 cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key EOF setenforce 0 yum install -y kubelet kubeadm kubectl # kubelet:Kubernetes 的节点代理,负责容器的运行时管理。 # kubeadm:Kubernetes 的集群管理工具,用于部署和管理 Kubernetes 集群。 # kubectl:Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互和管理。 ## 开机自启动和启动 systemctl enable kubelet && systemctl start kubelet systemctl enable --now kubelet systemctl enable --now kubelet 是设置并立即启动服务,适合在需要确保服务立即启动且开机启动的情况下使用。 systemctl enable kubelet && systemctl start kubelet 是设置开机启动并手动启动服务,适合在只需设置开机启动并手动控制服务启动时使用。 # 查看版本 yum -y list kubeadm --showduplicates | sort -r # yum list 命令用于列出可用的软件包及其版本。 # --showduplicates 参数显示所有版本的软件包。 # sort -r 命令按照逆序(从最新到最旧)排序列出的软件包版本。 # 设置kubelet的额外参数和kube-proxy的模式: cat <<EOF > /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" EOF
# 下载containerd(每个节点都做) #------containerd------ wget https://github.com/containerd/containerd/releases/download/v1.7.18/cri-containerd-cni-1.7.18-linux-amd64.tar.gz tar xf cri-containerd-cni-1.7.18-linux-amd64.tar.gz -C / #----libseccomp准备----- wget https://github.com/opencontainers/runc/releases/download/v1.1.13/libseccomp-2.5.5.tar.gz && tar xf libseccomp-2.5.5.tar.gz && cd libseccomp-2.5.5/ && yum install gperf -y && ./configure && make && make install #------runc准备----- wget https://github.com/opencontainers/runc/releases/download/v1.1.13/runc.amd64 && chmod +x runc.amd64 && mv runc.amd64 /usr/local/sbin/runc && runc -v ## 结果 [root@master01 ~]$ runc -v runc version 1.1.13 commit: v1.1.13-0-g58aa9203-dirty spec: 1.0.2-dev go: go1.21.11 libseccomp: 2.5.5 [root@master01 ~]$
# 修改containerd配置文件 #下载containerd并初始化配置 mkdir -p /etc/containerd/ && containerd config default | tee /etc/containerd/config.toml # 更改containerd上的cgroup sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml # 修改镜像源为阿里 sed -i "s#registry.k8s.io#registry.aliyuncs.com/google_containers#g" /etc/containerd/config.toml # 验证 grep -E "SystemdCgroup\s*=\s*true" /etc/containerd/config.toml grep "registry.aliyuncs.com/google_containers" /etc/containerd/config.toml [root@master01 ~]$ crictl --version crictl version 1.27.0 [root@master ~]# cat <<EOF | tee /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF systemctl daemon-reload && systemctl start containerd && systemctl enable containerd && systemctl status containerd.service
#全局拉取需要的镜像 kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --------------------------------主节点执行------------------------------ # 检查 crictl images # 初始化控制平面节点 # 创建初始化配置文件 kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml # 修改为国内阿里源 sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/kubernetes/init-default.yaml # 设置 apiServerIP 地址. 请自行替换172.25.14.101为自己宿主机IP sed -i 's/1.2.3.4/10.0.0.123/' /etc/kubernetes/init-default.yaml 初始化单节点 kubeadm init --image-repository registry.aliyuncs.com/google_containers
kubeadm init --image-repository registry.aliyuncs.com/google_containers --control-plane-endpoint "10.0.0.123:6443" --upload-certs
这个是正确的
如果直接就是ready,那就是本地文件问题 解决方案
rm -rf /etc/cni/net.d/* systemctl restart containerd.service && systemctl restart kubelet.service
开始之前需要操作
您需要以普通用户身份运行以下命令: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 或者,如果您是 root 用户,可以直接设置环境变量: export KUBECONFIG=/etc/kubernetes/admin.conf
所有组件都 echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc # 安装bash-completion ## bash-completion-extras需要epelrepo源 yum install -y bash-completion bash-completion-extras # 配置自动补全 source /usr/share/bash-completion/bash_completion echo 'source <(kubectl completion bash)' >>~/.bashrc 如果 kubectl 有关联的别名,你可以扩展 shell 补全来适配此别名: echo 'alias k=kubectl' >>~/.bashrc echo 'complete -F __start_kubectl k' >>~/.bashrc 系统全局 kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null source ~/.bashrc
性能要求: 如果对网络性能有较高要求,尤其是在大规模部署和数据中心环境中,Calico 的基于路由器的实现可能更合适。
安全性和简易性: Calico 提供了简单且安全的设计,适合需要强网络隔离和安全性的场景。
Overlay 网络需求: 如果需要快速部署和跨主机的 Overlay 网络,Flannel 可能更为合适,尤其是在小规模部署和测试环境中使用较为广泛。 https://github.com/projectcalico/calico https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart
预览: