【k8s集群应用】kubeadm1.20(单master)

文章目录

Kubernetes 集群

  1. 在所有节点上安装Docker和kubeadm
  2. 部署Kubernetes Master
  3. 部署容器网络插件
  4. 部署 Kubernetes Node,将节点加入Kubernetes集群中
  5. 部署 Dashboard Web 页面,可视化查看Kubernetes资源
  6. 部署 Harbor 私有仓库,存放镜像资源

Kubernetes 集群环境准备

节点配置概览

节点名称 配置(CPU/内存) IP地址 安装软件
master 2C/4G(CPU核心数要求大于2) 20.0.0.10 docker、kubeadm、kubelet、kubectl、flannel
node01 2C/2G 20.0.0.58 docker、kubeadm、kubelet、kubectl、flannel
node02 2C/2G 20.0.0.59 docker、kubeadm、kubelet、kubectl、flannel
Harbor节点 - 20.0.0.57 docker、docker-compose、harbor-offline-v1.2.2

环境准备

  1. 关闭防火墙、SELinux 和 Swap

    • 在所有节点上执行以下命令:

      bash 复制代码
      systemctl stop firewalld
      systemctl disable firewalld
      setenforce 0
      sed -i 's/enforcing/disabled/' /etc/selinux/config
      iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
      swapoff -a
      sed -ri 's/.*swap.*/#&/' /etc/fstab
  2. 加载 ip_vs 模块

    • 在所有节点上执行以下命令:

      bash 复制代码
      for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
  3. 修改主机名

    • 在 Master 节点上执行:

      bash 复制代码
      hostnamectl set-hostname master01
    • 在 Node01 节点上执行:

      bash 复制代码
      hostnamectl set-hostname node01
    • 在 Node02 节点上执行:

      bash 复制代码
      hostnamectl set-hostname node02
  4. 修改 hosts 文件

    • 在所有节点上编辑 /etc/hosts 文件,添加以下内容:

      plaintext 复制代码
      20.0.0.10 master01
      20.0.0.58 node01
      20.0.0.59 node02
  5. 调整内核参数

    • 在所有节点上创建 /etc/sysctl.d/kubernetes.conf 文件,并添加以下内容:

      plaintext 复制代码
      # 开启网桥模式,可将网桥的流量传递给iptables链
      net.bridge.bridge-nf-call-ip6tables=1
      net.bridge.bridge-nf-call-iptables=1
      # 关闭ipv6协议
      net.ipv6.conf.all.disable_ipv6=1
      net.ipv4.ip_forward=1
    • 应用内核参数:

      bash 复制代码
      sysctl --system
注意
  • 关闭 Swap:Kubernetes 要求必须关闭 Swap 分区,否则会导致集群初始化失败。
  • 加载 ip_vs 模块:这是为了支持 Kubernetes 的 Service 负载均衡功能。
  • 调整内核参数:这些参数对于 Kubernetes 集群的网络和性能至关重要。

Kubernetes 集群环境搭建

所有节点安装 Docker

  1. 安装依赖

    bash 复制代码
    yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 添加 Docker 仓库

    bash 复制代码
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. 安装 Docker

    bash 复制代码
    yum install -y docker-ce docker-ce-cli containerd.io
  4. 配置 Docker
    创建 /etc/docker/daemon.json 文件,并添加以下内容:

    json 复制代码
    {
      "registry-mirrors": ["https://docker.m.daocloud.io", "https://docker.1panel.live"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "500m",
        "max-file": "3"
      }
    }
  5. 重载 Systemd 配置并重启 Docker

    bash 复制代码
    systemctl daemon-reload
    systemctl restart docker.service
    systemctl enable docker.service
  6. 验证 Cgroup Driver

    bash 复制代码
    docker info | grep "Cgroup Driver"

    期望输出:Cgroup Driver: systemd

所有节点安装 kubeadm、kubelet 和 kubectl

  1. 定义 Kubernetes 源

    创建 /etc/yum.repos.d/kubernetes.repo 文件,并添加以下内容:

    ini 复制代码
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  2. 安装 kubeadm、kubelet 和 kubectl

    bash 复制代码
    yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15
  3. 设置 kubelet 开机自启

    bash 复制代码
    systemctl enable kubelet.service

    注意:在安装完 kubeadm、kubelet 和 kubectl 后,不要立即启动 kubelet 服务,因为此时 Kubernetes 集群还未初始化。kubelet 服务将在 Kubernetes 集群初始化后由 kubeadm 自动管理。

Kubernetes 集群部署

准备工作

事先准备好镜像

  1. 查看初始化所需镜像

    bash 复制代码
    kubeadm config images list --kubernetes-version 1.20.15
  2. 上传并加载镜像

    • v1.20.15.zip 压缩包上传到 Master 节点的 /opt 目录。

    • 解压并加载镜像:

      bash 复制代码
      unzip v1.20.15.zip -d /opt/k8s
      cd /opt/k8s/
      for i in $(ls *.tar); do docker load -i $i; done
  3. 复制镜像到 Node 节点

    • 使用 scp 命令将 /opt/k8s 目录复制到 Node 节点:

      bash 复制代码
      scp -r /opt/k8s root@node01:/opt
      scp -r /opt/k8s root@node02:/opt
    • 在 Node 节点上执行相同的 docker load 命令加载镜像。

初始化 kubeadm

方法一:使用配置文件
  1. 生成默认配置文件

    bash 复制代码
    kubeadm config print init-defaults > /opt/kubeadm-config.yaml
  2. 编辑配置文件

    bash 复制代码
    cd /opt/
    vim kubeadm-config.yaml
    ini 复制代码
    ......
    11 localAPIEndpoint:
    12   advertiseAddress: 20.0.0.10		#指定master节点的IP地址
    13   bindPort: 6443
    ......
    32 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers          #指定拉取镜像的仓库,默认是k8s.gcr.io
    33 kind: ClusterConfiguration
    34 kubernetesVersion: v1.20.15				#指定kubernetes版本号
    35 networking:
    36   dnsDomain: cluster.local
    37   podSubnet: "10.244.0.0/16"				#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
    38   serviceSubnet: 10.96.0.0/16			#指定service网段
    39 scheduler: {}
    #末尾再添加以下内容
    --- 
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    mode: ipvs									#把默认的kube-proxy调度方式改为ipvs模式
  3. 拉取镜像

    bash 复制代码
    kubeadm config images pull --config /opt/kubeadm-config.yaml
  4. 初始化 Master

    bash 复制代码
    kubeadm init --config=/opt/kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
    • --upload-certs 参数用于在后续加入节点时自动分发证书文件。
    • tee kubeadm-init.log 用于输出日志到 kubeadm-init.log 文件。
  5. 查看初始化日志

    bash 复制代码
    less kubeadm-init.log
  6. kubernetes配置文件目录

    复制代码
    ls /etc/kubernetes/
  7. 存放ca等证书和密码的目录

    复制代码
    ls /etc/kubernetes/pki
方法二:使用命令行参数
  1. 直接初始化 Master

    bash 复制代码
    kubeadm init \
      --apiserver-advertise-address=20.0.0.10 \
      --image-repository=registry.aliyuncs.com/google_containers \
      --kubernetes-version=v1.20.15 \
      --service-cidr=10.96.0.0/16 \
      --pod-network-cidr=10.244.0.0/16 \
      --upload-certs \
      --token-ttl=0

初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。

可选参数:

--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址

--apiserver-bind-port:apiserver的监听端口,默认是6443

--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki

--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加

--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io

--kubernetes-version:指定kubernetes版本

--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;

--service-cidr:service资源的网段

--service-dns-domain:service全域名的后缀,默认是cluster.local

--token-ttl:默认token的有效期为24小时,如果不想过期,可以加上 --token-ttl=0 这个参数

  1. 修改 kube-proxy 配置
    初始化后,需要修改 kube-proxy 的 ConfigMap,将调度模式改为 ipvs

    bash 复制代码
    kubectl edit cm kube-proxy -n=kube-system
    • 在打开的编辑器中,找到 mode 字段并将其值改为 ipvs

提示

复制代码
......
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

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 20.0.0.10:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
--discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2

配置 kubectl

  • kubectl 需要通过 API server 的认证和授权才能执行管理操作。
  • 使用 kubeadm 部署的集群会生成一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf
  • 将此配置文件复制到 kubectl 的默认配置路径 $HOME/.kube/config
bash 复制代码
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

检查集群健康状态

  • 如果 kubectl get cs 发现集群不健康,检查并修改以下两个文件:
    • /etc/kubernetes/manifests/kube-scheduler.yaml
    • /etc/kubernetes/manifests/kube-controller-manager.yaml
  • 修改内容:
    • --bind-address=127.0.0.1 改为控制节点 IP(例如 20.0.0.10)。
    • httpGet: 字段下的 hosts127.0.0.1 改为控制节点 IP。
    • 注释掉 --port=0
  • 重启 kubelet 服务:
bash 复制代码
systemctl restart kubelet

部署网络插件 Flannel

方法一

  • 上传 Flannel 镜像 flannel.tar 和 CNI 插件 cni-plugins-linux-amd64-v0.8.6.tgz/opt 目录。
  • 上传 kube-flannel.yml 文件到 master 节点。
  • 加载 Flannel 镜像,解压 CNI 插件,并替换原有 CNI 插件。
  • 在 master 节点创建 Flannel 资源:
bash 复制代码
cd /opt
docker load < flannel.tar
mv /opt/cni /opt/cni_bak
mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin
kubectl apply -f kube-flannel.yml

方法二

  • 直接使用官方提供的 Flannel 配置文件:
bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

节点加入集群

  • 在 node 节点上执行 kubeadm join 命令加入集群:
bash 复制代码
kubeadm join 20.0.0.10:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
    --discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2

检查集群状态

  • 在 master 节点查看节点状态:
bash 复制代码
kubectl get nodes
  • 查看 kube-system 命名空间下的 Pod 状态:
bash 复制代码
kubectl get pods -n kube-system
复制代码
NAME                             READY   STATUS    RESTARTS   AGE
coredns-bccdc95cf-c9w6l          1/1     Running   0          71m
coredns-bccdc95cf-nql5j          1/1     Running   0          71m
etcd-master                      1/1     Running   0          71m
kube-apiserver-master            1/1     Running   0          70m
kube-controller-manager-master   1/1     Running   0          70m
kube-flannel-ds-amd64-kfhwf      1/1     Running   0          2m53s
kube-flannel-ds-amd64-qkdfh      1/1     Running   0          46m
kube-flannel-ds-amd64-vffxv      1/1     Running   0          2m56s
kube-proxy-558p8                 1/1     Running   0          2m53s
kube-proxy-nwd7g                 1/1     Running   0          2m56s
kube-proxy-qpz8t                 1/1     Running   0          71m
kube-scheduler-master            1/1     Running   0          70m

测试 Pod 资源创建

  • 创建一个 Nginx 部署:
bash 复制代码
kubectl create deployment nginx --image=nginx
  • 查看 Pod 详细信息:
bash 复制代码
kubectl get pods -o wide
复制代码
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-554b9c67f9-zr2xs   1/1     Running   0          14m   10.244.1.2   node01   <none>           <none>

暴露端口提供服务

  • 暴露 Nginx 部署的端口:
bash 复制代码
kubectl expose deployment nginx --port=80 --type=NodePort
  • 查看服务状态:
bash 复制代码
kubectl get svc
复制代码
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        25h
nginx        NodePort    10.96.15.132   <none>        80:32698/TCP   4s

测试访问

  • 使用 curl 命令测试访问服务:
bash 复制代码
curl http://<node-ip>:<node-port>

例如:

bash 复制代码
curl http://node01:32698
  • 扩展3个副本
bash 复制代码
kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide
复制代码
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-554b9c67f9-9kh4s   1/1     Running   0          66s   10.244.1.3   node01   <none>           <none>
nginx-554b9c67f9-rv77q   1/1     Running   0          66s   10.244.2.2   node02   <none>           <none>
nginx-554b9c67f9-zr2xs   1/1     Running   0          17m   10.244.1.2   node01   <none>           <none>

部署 Dashboard

master01 节点上操作。

上传并修改 recommended.yaml 文件

  1. 上传文件

    bash 复制代码
    cd /opt/k8s
  2. 编辑文件

    bash 复制代码
    vim recommended.yaml

    在文件中找到 Service 部分,修改为 NodePort 类型,并指定 nodePort30001。修改后的 Service 部分应如下所示:

    yaml 复制代码
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kubernetes-dashboard
    spec:
      ports:
        - port: 443
          targetPort: 8443
          nodePort: 30001
      type: NodePort
      selector:
        k8s-app: kubernetes-dashboard
  3. 应用配置文件

    bash 复制代码
    kubectl apply -f recommended.yaml
创建 Service Account 并绑定 Cluster Role
  1. 创建 Service Account

    bash 复制代码
    kubectl create serviceaccount dashboard-admin -n kube-system
  2. 创建 Cluster Role Binding

    bash 复制代码
    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
  3. 获取并查看 Token

    bash 复制代码
    ubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

访问 Dashboard

  1. 打开浏览器
    使用你的浏览器打开以下 URL:

    复制代码
    https://NodeIP:30001

    其中 NodeIP 是你的 Kubernetes 集群中任意一个节点的 IP 地址。

  2. 登录
    在登录页面,使用刚才获取的 Token 进行登录。将 Token 复制到登录框中,然后点击登录。

Harbor 私有仓库

准备工作

  1. 修改主机名

    bash 复制代码
    hostnamectl set-hostname hub.xy101.com
  2. 添加主机名映射

    bash 复制代码
    echo '20.0.0.57 hub.xy101.com' >> /etc/hosts
安装 Docker
  1. 安装依赖

    bash 复制代码
    yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 添加 Docker 仓库

    bash 复制代码
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. 安装 Docker

    bash 复制代码
    yum install -y docker-ce docker-ce-cli containerd.io
  4. 配置 Docker

    bash 复制代码
    mkdir /etc/docker
    cat > /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "500m", "max-file": "3"
      },
      "insecure-registries": ["hub.xy101.com"]
    }
  5. 启动并启用 Docker

    bash 复制代码
    systemctl start docker
    systemctl enable docker
  6. 所有 node 节点都修改 docker 配置文件,加上私有仓库配置

bash 复制代码
   cat > /etc/docker/daemon.json <<EOF
   {
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m", "max-file": "3"
  },
  "insecure-registries": ["https://hub.xy101.com"]
}
EOF
  1. 启动并启用 Docker
bash 复制代码
systemctl daemon-reload
systemctl restart docker

安装 Harbor

  1. 上传并解压 Harbor 安装包
    上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 到 /opt 目录

    bash 复制代码
    cd /opt
    cp docker-compose /usr/local/bin/
    chmod +x /usr/local/bin/docker-compose
    
    tar zxvf harbor-offline-installer-v1.2.2.tgz
    cd harbor/
  2. 配置 Harbor

bash 复制代码
vim harbor.cfg
 
cfg 复制代码
5 hostname = hub.xy101.com
9 ui_url_protocol = https
24 ssl_cert = /data/cert/server.crt
25 ssl_cert_key = /data/cert/server.key
59 harbor_admin_password = Harbor12345
  1. 生成 SSL 证书

    bash 复制代码
    mkdir -p /data/cert
    cd /data/cert
    openssl genrsa -des3 -out server.key 2048
    # 输入密码 123456
    openssl req -new -key server.key -out server.csr
    # 输入私钥密码 123456输入私钥密码:123456
    #输入国家名:CN
    #输入省名:BJ
    #输入市名:BJ
    # 输入组织名:xy101
    #输入机构名:xy101
    #输入域名:hub.xy101.com
    #输入管理员邮箱:admin@xy101.com
    #其它全部直接回车

    备份私钥

    bash 复制代码
    cp server.key server.key.org
    openssl rsa -in server.key.org -out server.key#清除私钥密码
    # 输入私钥密码 123456

    签名证书

    复制代码
    openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
    chmod +x /data/cert/*
  2. 安装 Harbor

    bash 复制代码
    cd /opt/harbor/
    ./install.sh
  3. 访问 Harbor

  • 在本地使用火狐浏览器访问:https://hub.xy101.com
  • 添加例外 -> 确认安全例外
  • 用户名:admin
  • 密码:Harbor12345

Docker 登录与镜像推送

  1. 登录 Harbor

    bash 复制代码
    docker login -u admin -p Harbor12345 hub.xy101.com
  2. 推送镜像

    bash 复制代码
    docker tag nginx:latest hub.xy101.com/library/nginx:v1
    docker push hub.xy101.com/library/nginx:v1

Kubernetes 集成

  1. 删除原有 Nginx 资源

    bash 复制代码
    kubectl delete deployment nginx
  2. 创建新的 Nginx Deployment

    bash 复制代码
    kubectl run nginx-deployment --image=hub.xy101.com/library/nginx:v1 --port=80 --replicas=3
  3. 暴露服务

    bash 复制代码
    kubectl expose deployment nginx-deployment --port=30000 --target-port=80
    # 修改服务类型为 NodePort
    kubectl edit svc nginx-deployment
    # 将 type 改为 NodePort,并保存
    kubectl get svc,pods

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
    service/nginx-deployment ClusterIP 10.96.222.161 <none> 30000/TCP 3m15s

    NAME READY STATUS RESTARTS AGE
    pod/nginx-deployment-77bcbfbfdc-bv5bz 1/1 Running 0 16s
    pod/nginx-deployment-77bcbfbfdc-fq8wr 1/1 Running 0 16s
    pod/nginx-deployment-77bcbfbfdc-xrg45 1/1 Running 0 3m39s

安装ipvsadm并查看IPVS配置

bash 复制代码
yum install ipvsadm -y  # 在Linux系统上安装ipvsadm工具
ipvsadm -Ln             # 查看当前IPVS的配置,包括负载均衡规则等

使用curl命令测试访问

bash 复制代码
curl 10.96.222.161:30000  # 使用curl命令测试访问集群内部IP和端口,这里10.96.222.161是Service的Cluster IP,30000是端口

修改Kubernetes服务类型为NodePort

bash 复制代码
kubectl edit svc nginx-deployment  # 编辑服务
# 找到type字段,修改为NodePort

验证服务配置

bash 复制代码
kubectl get svc
# 输出应显示nginx-deployment的类型为NodePort,PORT(S)为30000:32340/TCP
复制代码
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
service/kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP           29m
service/nginx-deployment   NodePort    10.96.222.161   <none>        30000:32340/TCP   22m

通过浏览器访问服务

使用集群中任意节点的IP地址和NodePort(32340)访问服务。例如:

  • 20.0.0.10:32340
  • 20.0.0.58:32340
  • 20.0.0.59:32340

授予system:anonymous用户cluster-admin权限

bash 复制代码
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

内核参数优化

  1. 配置内核参数

    bash 复制代码
    cat > /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    net.ipv4.tcp_tw_recycle=0
    vm.swappiness=0 #禁止使用 swap 空间,只有当系统内存不足(OOM)时才允许使用它
    vm.overcommit_memory=1 #不检查物理内存是否够用
    vm.panic_on_oom=0#开启 OOM
    fs.inotify.max_user_instances=8192
    fs.inotify.max_user_watches=1048576
    fs.file-max=52706963 #指定最大文件句柄数
    fs.nr_open=52706963 #仅4.4以上版本支持
    net.ipv6.conf.all.disable_ipv6=1
    net.netfilter.nf_conntrack_max=2310720
    EOF

    应用配置:

    bash 复制代码
    sysctl --system

故障排查与重置

  1. 重置 kubeadm(初始化失败,进行的操作)

    bash 复制代码
    kubeadm reset -f
    ipvsadm --clear
    rm -rf ~/.kube
    #再次初始化
  2. 删除 Kubernetes 节点

    bash 复制代码
    kubectl delete node node02
相关推荐
程序员萌萌8 小时前
Redis的缓存机制和淘汰策略详解
数据库·redis·缓存机制·淘汰策略
不剪发的Tony老师9 小时前
SQLite 3.53.0版本发布,重要更新
数据库·sqlite
Bczheng19 小时前
九.Berkeley DB数据库 序列化和钱包管理(1)
数据库
cozil9 小时前
记录mysql创建数据库未指定字符集引发的问题及解决方法
数据库·mysql
架构师老Y9 小时前
013、数据库性能优化:索引、查询与连接池
数据库·python·oracle·性能优化·架构
键盘鼓手苏苏9 小时前
Kubernetes与GitOps高级实践
云原生·kubernetes·k8
AC赳赳老秦9 小时前
OpenClaw数据库高效操作指南:MySQL/PostgreSQL批量处理与数据迁移实战
大数据·数据库·mysql·elasticsearch·postgresql·deepseek·openclaw
一 乐9 小时前
校园线上招聘|基于springboot + vue校园线上招聘系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园线上招聘系统
liliangcsdn9 小时前
如何基于sentence_transformers构建向量计算工具
数据库·人工智能·全文检索
rchmin9 小时前
向量数据库Milvus安装及使用实战经验分享
数据库·milvus