Kubernetes集群部署

  • Kubernetes简介

    1. 背景:

Kubernetes,也称为K8S,其中8是代表中间“ubernete”的8个字符,Kubernetes这个单词来自于希腊语,含义是舵手或领航员;

K8S是 CNCF 的项目,源于Google的内部项目borg系统,2014年Google用go语言重新编写并开源出来,又后来为了其茁壮成长,捐给了CNCF;

Kubernetes拥有Google在生产环境上15年运行的经验,并结合了社区中最佳实践;

注:CNCF,全称Cloud Native Computing Foundation,即云原生计算基金会,这是一个非营利性的开源软件基金会,由一群致力于推动云计算发展和应用的科技公司创立,CNCF的主要目标是支持和推动云原生计算的发展,通过提供开放的API和工具,帮助开发者更高效地构建、部署和管理微服务应用。

  1. Kubernetes的功能:[华王1] 

用于容器自动化部署、规划、扩展和管理,它将组成应用程序的容器分组为逻辑单元,以便于管理和发现,用于管理云平台中多个主机上的容器化的应用

Kubernetes 的目标是让部署容器化的应用简单并且高效,很多细节都不需要运维人员去进行复杂的手工配置和处理;

  • Kubernetes整体架构[华王2] :master--nodes

  1. Master:集群控制节点

接受集群外用户的操作请求(如kubectl命令),对集群进行调度管理;

Master Node 由 API Server、Scheduler、ETCD 数据库(ClusterState Store)和 Controller Manger所组成

2、Nodes:集群工作节点,也叫Worker Node,运行用户业务容器;

包含kubelet、kube proxy 和 Pod(麻屋子pod,红帐子容器,里面住着个白胖子容器中的服务

  • 部署 Kubernetes 集群方式介绍

部署集群有多种方式:

    1. minikube[华王3] 

minikube可以在本地运行Kubernetes的工具,minikube可以在个人计算机(包括Windows,macOS和Linux PC)上运行一个单节点Kubernetes集群,以便您可以试用Kubernetes或进行日常开发工作;

    1. kind[华王4] 

Kind和minikube类似的工具,让你在本地计算机上运行Kubernetes,此工具需要安装并配置Docker;

    1. kubeadm[华王5] 

Kubeadm是一个K8s部署工具,提供kubeadm init 和 kubeadm join两个操作命令,可以快速部署一个Kubernetes集群;

官方地址:

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

Installing kubeadm | Kubernetes

    1. 二进制包

从Github下载发行版的二进制包,手动部署安装每个组件,组成Kubernetes集群,步骤比较繁琐,但是能让你对各个组件有更清晰的认识;

    1. yum安装

通过yum安装Kubernetes的每个组件,组成Kubernetes集群,不过yum源里面的k8s版本已经比较老了,所以这种方式用得也比较少了;

    1. 第三方工具

有一些大神封装了一些工具,利用这些工具进行k8s环境的安装;

    1. 花钱购买

直接购买类似阿里云这样的公有云平台k8s,一键搞定;

  • 集群节点准备

1.1 主机操作系统说明

CentOS7u9

1.2 主机硬件配置说明

Cpu 4核,内存4G,硬盘100G

1.3 主机配置

1.3.1  主机名配置

由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为master01;其中2台为worker节点,名称分别为:worker01及worker02

master节点192.168.10.11

[root@localhost ~]# hostnamectl set-hostname master01

[root@localhost ~]# bash

worker01节点192.168.10.12

[root@localhost ~]# hostnamectl set-hostname worker01

[root@localhost ~]# bash

 worker02节点 192.168.10.13

[root@localhost ~]# hostnamectl set-hostname worker02

[root@localhost ~]# bash

1.3.2 主机IP地址配置

 master01节点IP地址为:192.168.10.11/24

 worker1节点IP地址为:192.168.10.12/24

 worker2节点IP地址为:192.168.10.13/24

1.3.3 主机名与IP地址解析

所有集群主机均需要进行配置。

[root@master01 ~]#cd /etc/yum.repos.d/

[root@master01 yum.repos.d]# mv * /tmp/

[root@master01 yum.repos.d]#curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

[root@master01 yum.repos.d]#yum -y install wget

[root@master01 yum.repos.d]#wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

[root@master01 yum.repos.d]# yum -y install net-tools

 [root@master01 yum.repos.d]#yum -y install vim

[root@master01 yum.repos.d]#wget -O /etc/yum.repos.d/docker-ce.repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

将主机名映射到IP地址

[root@master01 ~]# vim /etc/hosts

添加:

192.168.10.11 master01

192.168.10.12 worker01

192.168.10.13 worker02

将hosts文件拷贝到其他两台主机上

[root@master01 ~]# scp -rp /etc/hosts root@192.168.10.12:/etc/

[root@master01 ~]# scp -rp /etc/hosts root@192.168.10.13:/etc/

1.3.4  防火墙配置

所有主机均需要操作。

关闭现有防火墙firewalld

# systemctl disable firewalld

# systemctl stop firewalld

1.3.5 SELINUX配置

所有主机均需要操作。修改SELinux配置需要重启操作系统。

# setenforce 0

 # sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

1.3.6 时间同步配置

所有主机均需要操作。最小化安装系统需要安装ntpdate软件。

[root@master01 ~]#yum -y install ntpdate

[root@master01 ~]# ntpdate time1.aliyun.com

[root@master01 ~]# crontab -e

0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com

1.3.7 配置内核路由转发及网桥过滤

所有主机均需要操作。

添加网桥过滤及内核转发配置文件

[root@master01 ~]# vim /etc/sysctl.d/k8s.conf

添加:

net.bridge.bridge-nf-call-ip6tables = 1[华王6] 

net.bridge.bridge-nf-call-iptables = 1[华王7] 

net.ipv4.ip_forward = 1[华王8] 

vm.swappiness = 0 [华王9] 

[root@master01 ~]# sysctl --system

加载br_netfilter模块(网桥过滤)

[root@master01 ~]# modprobe br_netfilter[华王10] 

[root@master01 ~]# echo "modprobe br_netfilter" >> /etc/rc.d/rc.local[华王11] 

[root@master01 ~]# chmod +x /etc/rc.d/rc.local

查看是否加载

[root@master01 ~]#  lsmod | grep br_netfilter   

 

1.3.8 安装ipset及ipvsadm

所有主机均需要操作。

安装ipset[华王12] 及ipvsadm[华王13] 

[root@master01 ~]# yum -y install ipset ipvsadm 

配置ipvsadm模块加载方式

添加需要加载的模块

[root@master01 ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF

#!/bin/bash

modprobe -- ip_vs[华王14] 

modprobe -- ip_vs_rr[华王15] 

modprobe -- ip_vs_wrr[华王16] 

modprobe -- ip_vs_sh[华王17] 

modprobe -- nf_conntrack[华王18] 

EOF

授权、运行、检查是否加载

[root@master01 ~]#chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

 

1.3.10 关闭SWAP分区[华王19] (虚拟内存)

修改完成后需要重启操作系统,如不重启,可临时关闭,命令为

[root@master01 ~]# swapoff -a

 永久关闭swap分区

[root@master01 ~]# vim /etc/fstab

在行首添加#注释掉

# /dev/mapper/centos-swap swap  swap    defaults      0 0

 

  • Docker准备

2.1 Docker安装YUM源准备

使用阿里云开源软件镜像站。

[root@master01 ~]#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

2.2 Docker安装

[root@master01 ~]# yum -y install docker-ce

2.3 启动Docker服务

[root@master01 ~]#systemctl enable --now docker

2.4 修改cgroup方式,添加国内镜像源

/etc/docker/daemon.json 默认没有此文件,需要单独创建

在/etc/docker/daemon.json添加如下内容

[root@master01 ~]# vim /etc/docker/daemon.json

{

  "exec-opts": ["native.cgroupdriver=systemd"],

  "registry-mirrors": [

    "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",

    "https://docker.m.daocloud.io",

    "https://hub-mirror.c.163.com",

    "https://mirror.baidubce.com",

    "https://your_preferred_mirror",

    "https://dockerhub.icu",

    "https://docker.registry.cyou",

    "https://docker-cf.registry.cyou",

    "https://dockercf.jsdelivr.fyi",

    "https://docker.jsdelivr.fyi",

    "https://dockertest.jsdelivr.fyi",

    "https://mirror.aliyuncs.com",

    "https://dockerproxy.com",

    "https://mirror.baidubce.com",

    "https://docker.m.daocloud.io",

    "https://docker.nju.edu.cn",

    "https://docker.mirrors.sjtug.sjtu.edu.cn",

    "https://docker.mirrors.ustc.edu.cn",

    "https://mirror.iscas.ac.cn",

    "https://docker.rainbond.cc"

  ]

}

[root@master01 ~]# systemctl restart docker

参考国内镜像加速器列表(vpn连接访问):

https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6

2.5 cri-dockerd[华王20] 安装

拖包

[root@master01 ~]# yum -y localinstall cri-dockerd-0.3.8-3.el7.x86_64.rpm

[root@master01 ~]# vim /usr/lib/systemd/system/cri-docker.service

修改第10行内容

ExecStart[华王21] =/usr/bin/cri-dockerd[华王22]  --pod-infra-container-image=registry.k8s.io/pause:3.9[华王23]  --container-runtime-endpoint fd://[华王24] 

[root@master01 ~]# systemctl start cri-docker

[root@master01 ~]# systemctl enable cri-docker 

  • kubernetes 1.28.2  集群部署

3.1  集群软件及版本说明(版本1.28.2,各个组件版本相同)

集群所有主机都安装:

Kubeadm初始化集群、管理集群等

Kubelet用于接收api-server指令,对pod生命周期进行管理

Kubectl集群应用命令行管理工具

3.2  kubernetes YUM源准备

添加阿里云YUM源

[root@master01 ~]# cat > /etc/yum.repos.d/k8s.repo <<EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1[华王25] 

gpgcheck=0[华王26] 

repo_gpgcheck=0[华王27] 

gpgkey[华王28] =https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

3.3 集群软件安装

所有节点均可安装

查看指定版本

[root@master01 ~]# yum list kubeadm.x86_64 --showduplicates | sort -r

[root@master01 ~]# yum list kubelet.x86_64 --showduplicates | sort -r

[root@master01 ~]# yum list kubectl.x86_64 --showduplicates | sort -r

 

安装指定版本

[root@master01 ~]# yum -y install  kubeadm-1.28.2-0  kubelet-1.28.2-0 kubectl-1.28.2-0

:不指定版本时,将安装yum源中最新版本 # yum -y install  kubeadm  kubelet kubectl

 

3.4 配置kubelet(用于管理pod)

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。

[root@master01 ~]# vim /etc/sysconfig/kubelet

添加:

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"[华王29] 

 

 设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

[root@master01 ~]# systemctl enable kubelet

3.5  集群镜像准备所有主机都需要做

查看集群所需的镜像,可使用VPN实现下载。

[root@master01 ~]#kubeadm config images list --kubernetes-version=v1.28.2

如果已提前下载导出为镜像文件,可复制后直接导入本地镜像库:

  拖包

导入镜像

[root@master01 ~]# docker load -i k8s-1.28.2.tar

 

3.6 集群初始化(注意--cri-socket 部分)只在master01上做

[root@master01 ~]# kubeadm init --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.10.11  --cri-socket unix:///var/run/cri-dockerd.sock

如果初始化失败后,可以重启一下

3.7  Worker节点加入群集:

3.7.1 在master01节点上执行提示中的内容

创建目录用于存放k8s配置文件

 [root@master01 ~]# mkdir -p $HOME/.kube

 [root@master01 ~]#sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

 [root@master01 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config[华王30] 

 [root@master01~]# export KUBECONFIG=/etc/kubernetes/admin.conf[华王31] 

3.7.2所有worker节点上执行加入群集命令:

复制提示中的内容,并在尾部添加cri-socket

worker01:192.168.10.12

[root@worker01 ~]# kubeadm join 192.168.10.11:6443 --token j3yyyx.6jrt4f5txicbelsy \

        --discovery-token-ca-cert-hash sha256:86ae71d3aa7b2b72907ade9ece9ed5c404fe24a9fc8891b0dcbb7e0dfe14d716 --cri-socket unix:///var/run/cri-dockerd.sock

worker02:192.168.10.13

[root@worker02 ~]# kubeadm join 192.168.10.11:6443 --token j3yyyx.6jrt4f5txicbelsy \

        --discovery-token-ca-cert-hash sha256:86ae71d3aa7b2b72907ade9ece9ed5c404fe24a9fc8891b0dcbb7e0dfe14d716 --cri-socket unix:///var/run/cri-dockerd.sock

:如果出现错误,不能加入集群,可先停止kubelet,清除状态信息,重新加入即可

示例:

# systemctl stop kubelet

# kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock

重新配置群集即可

3.8  集群网络插件部署 calicomatser01上做

使用calico部署集群网络

3.8.1 应用operator资源清单文件:

[root@master01 ~]# kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml

将yaml文件拖到master01

通过 Kubernetes 部署一个名为 tigera-operator 的资源

[root@master01 ~]#kubectl create -f tigera-operator.yaml

3.8.2 通过自定义资源方式安装:

如果提前已下载,直接修改pod对应的网段地址

[root@master01 ~]# vim custom-resources.yaml

修改文件第13行,修改为使用kubeadm init ----pod-network-cidr对应的IP地址段

......

 11     ipPools:

 12     - blockSize: 26

 13       cidr: 10.244.0.0/16

 14       encapsulation: VXLANCrossSubnet

......

3.8.3 应用资源清单文件

可提前下载镜像并导入本地镜像库(只在master01节点)

[root@master01 ~]# docker load < calico-typha.tar[华王32] 

[root@master01 ~]# docker load < calico_v3.25.1.tar[华王33] 

[root@master01 ~]# docker load < calico-apiserver.tar[华王34] 

通过 Kubernetes 部署一个自定义资源(Custom Resource,CR)

[root@master01 ~]# kubectl create -f custom-resources.yaml

实时监控 Calico 系统中所有 Pod 的状态

[root@master01 ~]# watch kubectl get pods -n calico-system

 

已经全部运行后,ctrl-C结束监控即可

[root@master01 ~]# kubectl get pods -n calico-system

 

 

  • 验证集群可用性

4.1 查看所有的节点

[root@master01 ~]# kubectl get nodes

注:如果出现如下状态,说明calico网络插件未装好

[root@master01 ~]# kubectl get nodes

NAME       STATUS     ROLES           AGE    VERSION

master01   NotReady   control-plane     3m4s   v1.28.2

worker01   NotReady   <none>          58s    v1.28.2

worker02   NotReady   <none>          4s     v1.28.2

 

4.2 查看集群健康情况

[root@master01 ~]# kubectl get cs

 

4.3 查看kubernetes集群pod运行情况

[root@master01 ~]# kubectl get pods -n kube-system

 

4.4 再次查看calico-system命名空间中pod运行情况

[root@master01 ~]# kubectl get pods -n calico-system

补充辅助操作:设置kubectl命令行工具自动补全功能

[root@master01 ~]# yum install -y bash-completion

加载 Bash 自动补全功能。

[root@master01 ~]# source /usr/share/bash-completion/bash_completion

启用 kubectl 的 Bash 自动补全功能。

[root@master01 ~]# source <(kubectl completion bash)

将 kubectl 自动补全的配置添加到 ~/.bashrc 文件中

[root@master01 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

 

为了以后我们写yaml文件方便些,这里设置tab键空格个数

  

[root@master ~]# vim .vimrc

添加:

set tabstop=2

[root@master ~]# source .vimrc

注意:

[root@master01 ~]# kubectl get nodes

E0310 23:10:58.590120    1646 memcache.go:265] couldn't get current server API group list: Get "https://192.168.10.11:6443/api?timeout=32s ": dial tcp 192.168.10.11:6443: connect: connection refused

  

故障原因可能是:

kubelet、docker、cri-docker等服务异常,可重启服务尝试


 [华王1]1. 自动部署应用

  • 功能:你只需要告诉 Kubernetes 你想运行什么应用,它就会自动帮你部署好,不用手动操作。
  • 例子:就像你告诉厨师想吃什么菜,厨师会自动做好端上来。

2. 自动扩展

  • 功能:如果你的应用突然有很多人用,Kubernetes 会自动增加更多的容器来分担压力;如果没人用,它会减少容器,节省资源。
  • 例子:就像餐厅人多时自动加桌子,人少时收桌子。

3. 自动修复

  • 功能:如果某个容器挂了,Kubernetes 会自动重启它;如果整个服务器出问题,它会把容器搬到其他服务器上。
  • 例子:就像家里的灯泡坏了,系统会自动换一个新的。

4. 负载均衡

  • 功能:Kubernetes 会把用户的请求平均分配到多个容器上,避免某个容器太忙。
  • 例子:就像银行开多个窗口,让顾客不用只排一个队。

5. 存储管理

  • 功能:Kubernetes 可以自动挂载存储(比如硬盘),让你的应用能保存数据。
  • 例子:就像给你的应用配了一个随身U盘,随时存东西。

6. 滚动更新和回滚

  • 功能:更新应用时,Kubernetes 会逐步替换旧版本,如果新版本有问题,它会自动回滚到旧版本。
  • 例子:就像修路时,先修一半,等修好了再修另一半;如果修坏了,马上恢复原样。

7. 服务发现

  • 功能:Kubernetes 会自动给每个容器分配一个地址,其他容器可以通过这个地址找到它。
  • 例子:就像给每个人发一个电话号码,大家可以直接打电话联系。

8. 配置和密钥管理

  • 功能:Kubernetes 可以帮你管理应用的配置文件和敏感信息(比如密码),并安全地传递给容器。
  • 例子:就像把你的密码和设置放在一个保险箱里,需要用的时候再拿出来。

9. 批处理任务

  • 功能:Kubernetes 可以运行一次性任务或定时任务,比如每天凌晨清理数据。
  • 例子:就像设定一个闹钟,到点自动执行任务。

10. 多环境支持

  • 功能:Kubernetes 可以在本地、云上或者混合环境中运行,轻松迁移应用。
  • 例子:就像你的手机APP可以在不同品牌的手机上运行。

11. 监控和日志

  • 功能:Kubernetes 可以监控应用的运行状态,并记录日志,方便你排查问题。
  • 例子:就像给你的应用装了一个行车记录仪,随时查看发生了什么。

  1.  [华王2]用户请求:用户通过互联网发送请求到 Kubernetes 集群。
  2. 防火墙:请求首先通过防火墙,确保只有合法的请求能够进入集群。
  3. 主控节点(Master)
    • API Server:接收用户的请求,并进行身份验证(Auth)。
    • Scheduler:根据资源情况和调度策略,决定将请求分配到哪个节点(Node)上运行。
    • Controller Manager:确保集群的当前状态与用户定义的期望状态一致。
  1. 节点(Node)
    1. kubelet:负责与主控节点通信,并管理节点上的 Pod 和容器。
    2. kube-proxy:处理节点上的网络通信,确保 Pod 之间的网络连接。
  1. Pod 和容器
    1. Pod:Kubernetes 中最小的部署单元,包含一个或多个容器。
    2. Container:实际运行应用程序的容器。
  1. 流程总结
    1. 用户请求通过防火墙进入集群。
    2. API Server 接收请求并进行身份验证。
    3. Scheduler 将请求分配到合适的节点。
    4. Controller Manager 确保集群状态符合预期。
    5. 节点上的 kubelet 和 kube-proxy 管理 Pod 和容器的运行及网络通信。
  •  [华王3]简介:minikube是一个轻量级的Kubernetes部署工具,允许开发者在本地快速启动和管理单节点Kubernetes集群。这种方式非常适合开发和测试使用,因为开发者不需要复杂的配置就能搭建起一个完整的Kubernetes集群,从而节省了时间和资源。
  • 特点
    • 支持多驱动,包括Docker、Hyper-V、VirtualBox等,适配不同操作系统。
    • 允许指定Kubernetes版本,便于多版本测试。
    • 集成Ingress、Dashboard、Metrics Server等插件,一键启用。
    • 支持Kubernetes的主要功能,如DNS、NodePorts、ConfigMaps和Secrets、仪表板等。

 [华王4]kind

  • 简介:kind(Kubernetes in Docker)是一个使用 Docker 容器作为节点来运行本地 Kubernetes 集群的工具。它主要用于测试 Kubernetes 本身,也可用于本地开发或 CI。
  • 特点
    • 支持多节点(包括高可用)集群。
    • 支持从源代码构建 Kubernetes 发行版。
    • 支持 Linux、macOS 和 Windows。
    • 是 CNCF 认证的符合 Kubernetes 标准的安装程序。

 [华王5]kubeadm

  • 简介:kubeadm 是官方社区推出的一个用于快速部署 Kubernetes 集群的工具。它能通过简单的指令完成 Kubernetes 集群的部署。
  • 特点
    • 可以通过两条指令完成一个 Kubernetes 集群的部署:创建一个 Master 节点 $ kubeadm init,将一个 Node 节点加入到当前集群中 $ kubeadm join <Master节点的IP和端口>。
    • 实现尽可能简单地部署符合最佳实践、满足基本安全合规要求的 Kubernetes 高可用集群。

  •  
  •  [华王6]作用:允许 Linux 网桥(bridge)将 IPv6 数据包传递给 ip6tables 进行处理。
  • 意义
    • 在 Kubernetes 中,网络插件(如 Calico、Flannel)通常会使用网桥来管理容器网络。
    • 启用此参数可以确保 IPv6 数据包经过 ip6tables 的过滤和转发规则,保证网络安全和策略生效。
  •  [华王7]作用:允许 Linux 网桥将 IPv4 数据包传递给 iptables 进行处理。
  • 意义
    • Kubernetes 依赖 iptables 来实现服务负载均衡、网络策略等功能。
    • 启用此参数可以确保 IPv4 数据包经过 iptables 的过滤和转发规则,保证网络功能正常。
  •  [华王8]作用:启用 IPv4 数据包的转发功能。
  • 意义
    • Kubernetes 节点需要转发数据包以实现 Pod 之间的通信以及 Pod 与外部网络的通信。
    • 启用此参数后,节点可以充当路由器,转发数据包。
  •  [华王9]作用:控制内核使用交换分区(swap)的倾向。
  • 意义
    • 当 vm.swappiness = 0 时,内核会尽量避免使用交换分区,除非内存完全耗尽。
    • 在 Kubernetes 中,禁用或减少交换分区的使用可以提高性能,因为容器化应用对内存访问速度非常敏感。
  •  [华王10]br_netfilter 是一个内核模块,用于使 Linux 网桥(bridge)能够处理 iptables 和 ip6tables 的规则。
  • 在 Kubernetes 中,br_netfilter 是必需的,因为它确保数据包经过网桥时能够被 iptables 过滤和转发,从而实现服务负载均衡、网络策略等功能。
  •  [华王11]/etc/rc.d/rc.local 是一个脚本文件,系统在启动时会自动执行其中的命令。
  • 通过将 modprobe br_netfilter 添加到该文件,可以确保每次系统重启后自动加载 br_netfilter 模块。

 [华王12]ipset

作用:ipset 是一个用于管理 IP 地址集合的工具,可以与 iptables 结合使用,高效地处理大量 IP 地址的过滤和匹配。

意义:

在 Kubernetes 中,ipset 通常用于优化网络策略和服务负载均衡的性能。

它可以减少 iptables 规则的数量,提高规则匹配的效率。

 [华王13]ipvsadm

作用:ipvsadm 是 IP Virtual Server (IPVS) 的管理工具,用于配置和管理 Linux 内核中的负载均衡功能。

意义:

Kubernetes 支持使用 IPVS 作为 kube-proxy 的负载均衡模式,替代默认的 iptables 模式。

IPVS 提供了更高的性能和更灵活的负载均衡算法(如轮询、最小连接等),适合大规模集群。

  •  [华王14]ip_vs:IP Virtual Server 核心模块,提供负载均衡功能。
  •  [华王15]ip_vs_rr:轮询(Round Robin)调度算法模块。

 [华王16]ip_vs_wrr:加权轮询(Weighted Round Robin)调度算法模块

  •  [华王17]ip_vs_sh:源地址哈希(Source Hashing)调度算法模块。
  •  [华王18]nf_conntrack:连接跟踪模块,用于跟踪网络连接状态。

 [华王19]1. Kubernetes 的资源管理机制

  • Kubernetes 使用 cgroups 来管理容器的资源(如 CPU 和内存)。
  • 当容器使用的内存超过其限制时,Kubernetes 会终止该容器并重新启动它(OOM Killer,Out-Of-Memory Killer)。
  • 如果启用了 SWAP,容器可能会将部分内存数据交换到 SWAP 分区,导致 Kubernetes 无法准确判断容器的实际内存使用情况。
  • 这会导致 Kubernetes 的资源调度和限制机制失效,影响集群的稳定性和性能。

2. 性能问题

  • SWAP 分区 是基于磁盘的虚拟内存,访问速度远低于物理内存(RAM)。
  • 当系统内存不足时,操作系统会将部分内存数据交换到 SWAP 分区,这会显著降低系统性能。
  • 在 Kubernetes 中,容器化应用通常对性能要求较高,使用 SWAP 会导致应用响应变慢,甚至引发超时或故障。

3. 节点资源分配的准确性

  • Kubernetes 调度器(Scheduler)依赖于节点的可用资源(如 CPU 和内存)来决定将 Pod 调度到哪个节点。
  • 如果启用了 SWAP,节点的可用内存可能会被高估(因为部分内存被交换到 SWAP),导致调度器做出错误的调度决策。
  • 这可能会导致节点过载,影响集群的稳定性和性能。

4. 与 kubelet 的兼容性

  • Kubernetes 的 kubelet 组件默认会检查节点的 SWAP 状态。
  • 如果 SWAP 启用,kubelet 会拒绝启动或运行,除非显式配置 --fail-swap-on=false 参数。
  • 为了避免额外的配置复杂性,通常建议直接关闭 SWAP。

 [华王20]容器运行时接口(CRI)支持

  • 实现CRI接口:cri-dockerd为Docker提供了一个shim,使得Kubernetes可以通过其容器运行时接口(CRI)来控制Docker。这使得Kubernetes能够以统一的方式与不同的容器运行时进行交互,而不需要针对每种运行时编写特定的代码。
  1.  [华王21]ExecStart:
    • 这是 systemd 服务文件中的一个指令,用于指定启动服务时要执行的命令或脚本。
    • 在这里,它指定了启动 cri-dockerd 服务的命令及其参数。
  1.  [华王22]/usr/bin/cri-dockerd:
    • 这是 cri-dockerd 的可执行文件路径。cri-dockerd 是一个允许 Kubernetes 使用 Docker 作为容器运行时的组件。
  1.  [华王23]--pod-infra-container-image=registry.k8s.io/pause:3.9:
    • 这个参数指定了 Pod 基础设施容器的镜像。
    • 在 Kubernetes 中,每个 Pod 都会启动一个特殊的基础设施容器(通常称为 pause 容器),它负责为 Pod 中的其他容器提供网络命名空间和其他基础功能。
    • registry.k8s.io/pause:3.9 是这个基础设施容器镜像的地址和版本。
  1.  [华王24]--container-runtime-endpoint fd://:
    • 这个参数指定了容器运行时的通信端点。
    • fd:// 表示使用 Unix 域套接字进行通信,这是 Docker 的默认通信方式。

 [华王25]enabled=1:

表示该 yum 源已启用,系统可以从中安装软件包。

  1.  [华王26]gpgcheck=0:
    • 关闭 GPG 签名检查,即不验证软件包的签名。
  1.  [华王27]repo_gpgcheck=0:
    • 关闭对整个仓库的 GPG 签名检查。
  1.  [华王28]gpgkey:
    • 指定了 GPG 公钥的地址,用于验证软件包的签名。这里提供了两个公钥的 URL。
  •  [华王29]在 Linux 系统中,cgroup 的管理方式有两种:
    1. cgroupfs:默认的 cgroup 驱动,直接使用文件系统管理 cgroup。
    2. systemd:使用 systemd 的 cgroup 管理功能。
  • 如果系统的初始化进程是 systemd(大多数现代 Linux 发行版默认使用 systemd),则需要将 kubelet 的 cgroup 驱动设置为 systemd,以确保 kubelet 和容器运行时使用相同的 cgroup 驱动。
  • 如果 kubelet 和容器运行时的 cgroup 驱动不一致,可能会导致资源管理错误,甚至 kubelet 无法启动。
  •  [华王30]作用:将 ~/.kube/config 文件的所有权更改为当前用户,确保 kubectl 可以访问该文件。
  • 注意
    • $(id -u) 获取当前用户的 UID。
    • $(id -g) 获取当前用户的 GID。
  •  [华王31]作用:将 KUBECONFIG 环境变量设置为 Kubernetes 管理配置文件的路径,使 kubectl 能够正确连接到集群。
  • 注意
    • 这个环境变量的设置是临时的,仅在当前终端会话中有效。
    • 如果希望永久生效,可以将该命令添加到用户的 shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)中:

 [华王32]calico-typha.tar

  • 作用:包含 Calico Typha 组件的容器镜像。Typha 是 Calico 架构中的一个组件,主要负责在数据存储(如 Kubernetes API 服务器)和多个 Felix 实例之间进行通信,以提高大规模部署中的性能和可扩展性。

 [华王33]calico_v3.25.1.tar

  • 作用:包含 Calico v3.25.1 版本的安装文件和相关配置。这个文件通常是一个压缩包,里面包含了在 Kubernetes 集群中部署 Calico 所需的清单文件(如 YAML 文件)和相关脚本。

 [华王34]calico-apiserver.tar

  • 作用:包含 Calico API Server 组件的容器镜像。Calico API Server 提供了一个 RESTful API,用于管理 Calico 的网络策略和网络安全相关配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值