K8S学习笔记-------1.安装部署K8S集群环境

1.修改为root权限

bash 复制代码
#sudo su   

2.修改主机名

bash 复制代码
#hostnamectl set-hostname k8s-master01 

3.查看网络地址

bash 复制代码
sudo nano /etc/netplan/01-netcfg.yaml

4.使网络配置修改生效

bash 复制代码
sudo netplan apply

5.修改UUID(某些虚拟机系统,需要设置才能生成UUID)#

  • 查看UUID:dmidecode -s system-uuid
  • 查看UUID:ls -l /sys/class/dmi/id/product_uuid

在这里插入图片描述

6.修改machine-id

bash 复制代码
root@k8s-master01:/home/zgq# hostnamectl status
 Static hostname: k8s-master01
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: 6e06b8a62f094742915c390eab08c802
         Boot ID: 2f2ee93655c148ab8d5a231444047515
  Virtualization: kvm
Operating System: Ubuntu 24.04.1 LTS              
          Kernel: Linux 6.8.0-51-generic
    Architecture: x86-64
 Hardware Vendor: sangfor
  Hardware Model: _acloud_
Firmware Version: rel-1.7.5.1-20190822_073655
   Firmware Date: Tue 2014-04-01
    Firmware Age: 10y 8month 3w 2d                
root@k8s-master01:/home/zgq# ls -l /etc/machine-id
-r--r--r-- 1 root root 33 Dec  4 13:42 /etc/machine-id
root@k8s-master01:/home/zgq# cat  /etc/machine-id
6e06b8a62f094742915c390eab08c802
root@k8s-master01:/home/zgq# rm -f   /etc/machine-id
root@k8s-master01:/home/zgq# systemd-machine-id-setup
Initializing machine ID from VM UUID.
root@k8s-master01:/home/zgq# cat  /etc/machine-id
bad4f9616ef844369a8b351e8752d5c6

7.关闭SWAP分区

kubelet 的默认行为是在节点上检测到交换内存时无法启动。 这意味着要么禁用交换(swap)功能,要么让 kubelet 容忍交换。

  • 若需允许交换分区(swap),请在 kubelet 配置文件中添加 failSwapOn: falsels -,或通过命令行参数指定。 注意:即使设置了 failSwapOn: false,工作负载默认情况下仍无法访问交换空间。 可以通过在 kubelet 配置文件中设置 swapBehavior 来修改此设置。若要使用交换空间, 请设置 swapBehavior 的值,这个值不能是默认的 NoSwap。 更多细节参阅交换内存管理。
  • 要禁用交换分区(swap),可以使用命令 sudo swapoff -a 暂时关闭交换分区功能。 要使此更改在重启后仍然生效,请确保在系统的配置文件(如 /etc/fstab 或 systemd.swap)中禁用交换功能, 具体取决于你的系统配置方式。
    swapoff -a && sysctl -w vm.swappiness=0 # 临时关闭
    sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab # 基于配置文件关闭

8.时区和时间同步配置

  • 设置东8区
bash 复制代码
root@k8s-master01:/home/zgq# timedatectl set-timezone Asia/Shanghai
  • 同步阿里云
bash 复制代码
root@k8s-master01:/home/zgq# ntpdate ntp.aliyun.com
  • 自动同步:通过计划任务实现时间同步。
bash 复制代码
root@k8s-master01:/home/zgq# crontab -e
bash 复制代码
`0 */1 * * * ntpdate time1.aliyun.com
bash 复制代码
root@k8s-master01:/home/zgq# crontab -l
# m h  dom mon dow   command
0 0 * * * ntpdate ntp.aliyun.com

9.配置内核转发及网桥过滤

|||所有主机均需要操作

  1. 配置containerd需要的模块,本次执行,手动加载此模块
bash 复制代码
modprobe -- overlay
modprobe -- br_netfilter

2.开机自动加载所需的内核模块

bash 复制代码
root@k8s-master01:/home/zgq# cat << EOF | tee /etc/modules-load.d/k8s.conf 
overlay
br_netfilter
EOF
```ap

3.查看已加载的模块
```bash
root@k8s-node2:/home/zgq# lsmod | grep "overlay"
root@k8s-node2:/home/zgq# lsmod | grep "br_netfilter"

4.添加网桥过滤及内核转发配置文件
# 以下3个参数是containerd所依赖的内核参数

bash 复制代码
root@k8s-master01:/home/zgq# cat << EOF | tee /etc/sysctl.d/k8s.conf  
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

5.加载内核参数,使生效

bash 复制代码
root@k8s-master01:/home/zgq# sysctl --system

6.安装ipset及ipvsadm

|||||所有主机均需操作

当涉及到网络和流量管理时,ipset 和 ipvsadm 是两个常用的工具。下面是对它们的介绍:

  1. ipset:
    ipset 是一个用于管理 IP 地址集合的工具。
    它允许您创建、修改和删除包含 IP 地址、网络子网和端口号的集合。
    ipset 提供了高效的数据结构和算法,可以快速进行 IP 地址的匹配和查找。
    它经常与防火墙软件(如 iptables)一起使用,用于实现更高级的网络规则和过滤策略。
    iptables是Linux服务器上进行网络隔离的核心技术,内核在处理网络请求时会对iptables中的策略进行逐条解析,因此当策略较多时效率较低;而是用IPSet技术可以将策略中的五元组(协议,源地址,源端口,目的地址,目的端口)合并到有限的集合中,可以大大减少iptables策略条目从而提高效率。测试结果显示IPSet方式效率将比iptables提高100倍
  2. ipvsadm:
    ipvsadm 是一个用于配置 Linux 内核 IP 虚拟服务器(IPVS)的工具。
    IPVS 是一个实现负载均衡的内核模块,可以将传入的网络流量分发到多个后端服务器上。
    ipvsadm 可以用于创建、修改和删除 IPVS 规则和服务。
    它允许您定义负载均衡算法、设置后端服务器列表、配置健康检查和会话持久性等功能。
    通过 ipvsadm,您可以实现基于网络层或传输层的负载均衡,并优化网络流量的分发和处理。
    为什么要使用IPVS,从k8s的1.8版本开始,kube-proxy引入了IPVS模式,IPVS模式与iptables同样基于Netfilter,但是采用的hash表,因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能。
    ipvs依赖于nf_conntrack_ipv4内核模块,4.19包括之后内核里改名为nf_conntrack,1.13.1之前的kube-proxy的代码里没有加判断一直用的nf_conntrack_ipv4,好像是1.13.1后的kube-proxy代码里增加了判断,我测试了是会去load nf_conntrack使用ipvs正常

这两个工具在 Linux 系统中被广泛用于网络管理和负载均衡场景。它们提供了强大的功能和灵活性,用于管理和控制网络流量、配置防火墙规则以及实现高可用和高性能的网络服务。

  1. 安装ipset及ipvsadm
bash 复制代码
root@docker01:/home/zgq# apt install ipset ipvsadm

还可以准备:
sysstat 是一个用于监控系统性能的工具集,包括 iostat、mpstat、pidstat 和 sar 等工具。要在不同的操作系统上安装
‌conntrack‌ 是Linux内核中的一个重要组件,主要用于跟踪和记录网络连接的状态信息。它基于Netfilter框架实现,是防火墙、网络地址转换(NAT)等功能的基础。
libseccomp是一个用于Linux操作系统的安全计算模式(seccomp)的用户空间库.

  1. libseccomp支持seccomp安全计算模式,该模式是Linux内核的一种特性,允许限制进程可以执行的系统调用,以增加应用程序的安全性。

    libseccomp提供了用于创建、加载和管理seccomp过滤器的API。这些过滤器可以定义一组允许的系统调用规则,从而限制应用程序的系统调用集合,阻止对潜在危险的系统调用的调用。

  2. 所有节点创建要开机自动加载的模块配置文件

bash 复制代码
cat > /etc/modules-load.d/ipvs.conf << 'EOF'
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF

3.创建加载模块脚本文件

bash 复制代码
cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe  --  ip_vs
modprobe  --  ip_vs_rr
modprobe  --  ip_vs_wrr
modprobe  --  ip_vs_sh
modprobe  --  nf_conntrack
EOF
  1. 执行ipvs.sh
bash 复制代码
root@k8s-node2:/home/zgq# sh ipvs.sh

10.关闭防火墙

  • 查看ufw状态
bash 复制代码
root@k8s-master01:/home/zgq# systemctl status ufw
  • ufw disable
    启动时关闭
bash 复制代码
root@k8s-node2:/home/zgq# ufw disable

立即关闭

bash 复制代码
root@docker01:/home/zgq# systemctl disable  ufw

11.安装containerd

  1. 安装和配置
bash 复制代码
apt update && apt install -y containerd

看下版本

bash 复制代码
root@k8s-node2:/home/zgq# containerd -v
bash 复制代码
生成配置文件
mkdir -p /etc/containerd && \
containerd config default > /etc/containerd/config.toml
修改/etc/containerd/config.toml 文件中:
直接搜索SystemdCgroup
SystemdCgroup 为 true:
  1. 重载SANDBOX
    正常情况下,国内你是拉取不到registry.k8s.io/pause:3.8镜像的,这个镜像是一切的pod的基础,要么自己手动导入进来,要么改成国内的镜像,通过设置以下配置来覆盖默认的沙盒镜像:
    在你的 containerd 配置中, 你可以通过设置以下选项重载沙箱镜像:
bash 复制代码
[plugins."io.containerd.grpc.v1.cri"]
  sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

可以直接用命令

bash 复制代码
sudo sed -i 's/sandbox_image = ".*"/sandbox_image = "registry.aliyuncs.com\/google_containers\/pause:3.9"/' /etc/containerd/config.toml

12. 安装 kube三件套

bash 复制代码
 更新源
 sudo apt update && \
 sudo apt upgrade -y
 安装工具
 apt install -y apt-transport-https ca-certificates curl gpg
 创建目录,有的版本有,看情况创建
 mkdir -p -m 755 /etc/apt/keyrings
 下载秘钥
 curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg && \
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加软件源1.32
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新,安装软件,防止更新
apt update && \
apt install -y kubelet kubectl kubeadm && \
apt-mark hold kubelet kubeadm kubectl
设置开机自启
systemctl enable --now kubelet
查看版本
kubeadm version

13.初始化MASTER

  1. 先下载镜像,有科学的不用阿里
bash 复制代码
sudo kubeadm config images pull \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.32.0 \
--cri-socket=unix:///run/containerd/containerd.sock 
  1. 初始化
bash 复制代码
kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.95.211 \ //修改IP
--control-plane-endpoint=k8s-master01 \  //修改HOSTNAME
--kubernetes-version=v1.32.0 \
--service-cidr=10.50.0.0/16 \
--pod-network-cidr=10.60.0.0/16 \
--cri-socket=unix:///run/containerd/containerd.sock
  1. 完成初始化,规范化用户修改设置
bash 复制代码
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/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \
	--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 \
	--control-plane 

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \
	--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 
  • 不包括安装网络插件的,.Kubeadm 通过初始化安装是不包括网络插件的,也就是说初始化之后是不具备相关网络功能的,比如 k8s-master 节点上查看节点信息都是"Not Ready"状态、Pod 的 CoreDNS无法提供服务等。

  • 规范化修改用户设置

bash 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
  • 查看pods执行情况
bash 复制代码
kubectl get pods -A

14.加入集群

  1. 加入control panel 节点
bash 复制代码
kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \
	--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 \
	--control-plane 
  1. 加入worker 节点
bash 复制代码
kubeadm join k8s-master01:6443 --token fzhopw.bh01wzs2z4j7mfdd \
	--discovery-token-ca-cert-hash sha256:9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6 

如果忘记了token,可以采取以下方式重新获取token和sha256

bash 复制代码
root@k8s-master01:/home/zgq#kubeadm token create
qchluu.2qsq44a9rxttzv1q

root@k8s-master01:/home/zgq#openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null \
| sha256sum | awk '{print $1}'
9b65ee08ea9d0c50fe1f847cb58b4172f4b305a57e090acb8915322f50ecc7d6

14.安装calico

bash 复制代码
这里安装的目前最新版,这种方式安装不了的自行下载后执行
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
下载配置文件
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml
修改自己的cidr,然后执行
kubectl apply -f custom-resources.yaml
bash 复制代码
root@k8s-master01:/home/zgq# kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
namespace/tigera-operator created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/tiers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/adminnetworkpolicies.policy.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator created
bash 复制代码
root@k8s-master01:/home/zgq# kubectl apply -f custom-resources.yaml
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default created
root@k8s-master01:/home/zgq# kubectl get pods -A
NAMESPACE          NAME                                       READY   STATUS              RESTARTS   AGE
calico-apiserver   calico-apiserver-58548dbdb-jw49q           0/1     Pending             0          95s
calico-apiserver   calico-apiserver-58548dbdb-tpvqw           0/1     Pending             0          95s
calico-system      calico-kube-controllers-85d9cd79b5-8kqgk   0/1     Pending             0          94s
calico-system      calico-node-c9j2n                          0/1     Init:0/2            0          94s
calico-system      calico-typha-654c5b4475-7rbsx              0/1     ContainerCreating   0          95s
calico-system      csi-node-driver-dlw4n                      0/2     ContainerCreating   0          94s
kube-system        coredns-6766b7b6bb-87ndz                   0/1     Pending             0          3h45m
kube-system        coredns-6766b7b6bb-tbjxs                   0/1     Pending             0          3h45m
kube-system        etcd-k8s-master01                          1/1     Running             1          3h45m
kube-system        kube-apiserver-k8s-master01                1/1     Running             1          3h45m
kube-system        kube-controller-manager-k8s-master01       1/1     Running             1          3h45m
kube-system        kube-proxy-gp5nr                           1/1     Running             0          3h45m
kube-system        kube-scheduler-k8s-master01                1/1     Running             1          3h45m
tigera-operator    tigera-operator-7d68577dc5-5bm95           1/1     Running             0          10m

15.查看PODS状态

bash 复制代码
root@k8s-master01:/home/zgq# kubectl get pods -A
NAMESPACE          NAME                                       READY   STATUS    RESTARTS   AGE
calico-apiserver   calico-apiserver-58548dbdb-jw49q           1/1     Running   0          10h
calico-apiserver   calico-apiserver-58548dbdb-tpvqw           1/1     Running   0          10h
calico-system      calico-kube-controllers-85d9cd79b5-8kqgk   1/1     Running   0          10h
calico-system      calico-node-c9j2n                          1/1     Running   0          10h
calico-system      calico-typha-654c5b4475-7rbsx              1/1     Running   0          10h
calico-system      csi-node-driver-dlw4n                      2/2     Running   0          10h
kube-system        coredns-6766b7b6bb-87ndz                   1/1     Running   0          14h
kube-system        coredns-6766b7b6bb-tbjxs                   1/1     Running   0          14h
kube-system        etcd-k8s-master01                          1/1     Running   1          14h
kube-system        kube-apiserver-k8s-master01                1/1     Running   1          14h
kube-system        kube-controller-manager-k8s-master01       1/1     Running   1          14h
kube-system        kube-proxy-gp5nr                           1/1     Running   0          14h
kube-system        kube-scheduler-k8s-master01                1/1     Running   1          14h
tigera-operator    tigera-operator-7d68577dc5-5bm95           1/1     Running   0          10h
root@k8s-master01:/home/zgq# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok        
scheduler            Healthy   ok        
etcd-0               Healthy   ok        
root@k8s-master01:/home/zgq# kubectl get nodes
NAME           STATUS   ROLES           AGE   VERSION
k8s-master01   Ready    control-plane   14h   v1.32.0
root@k8s-master01:/home/zgq# kubectl get ns
NAME               STATUS   AGE
calico-apiserver   Active   10h
calico-system      Active   10h
default            Active   14h
kube-node-lease    Active   14h
kube-public        Active   14h
kube-system        Active   14h
tigera-operator    Active   11h

其他参考站点

  1. 阿里开源镜像站
相关推荐
私人珍藏库2 分钟前
经典本地影音播放器MPC-BE.
学习
亭台1 小时前
【Excel笔记_4】平均绝对偏差(MAD,Mean Absolute Deviation)的EXCEL公式表达
笔记·excel
dg10112 小时前
go-zero学习笔记(三)
笔记·学习·golang
知识点集锦3 小时前
【无标题】
网络·学习·microsoft·华为·云计算
yz-俞祥胜3 小时前
.Net Core笔记知识点(跨域、缓存)
笔记·.netcore
亭台3 小时前
【Excel笔记_5】 LET 函数中数据范围不连续的处理方法
笔记·excel
kfepiza3 小时前
Nginx反向代理 笔记250203
运维·服务器·笔记·nginx
LightspeedResearch3 小时前
冲刺高分!挑战7天一篇GBD DAY1-7
学习
南宫生4 小时前
力扣动态规划-19【算法学习day.113】
java·学习·算法·leetcode·动态规划