kubernetes集群架构和组件
master节点组件
kube-apiserver:Kubernetes API,集群的统一入口和各个组件的协调器。它通过RESTful API提供接口服务,所有对象资源的添加、删除、修改、监控操作都交给API服务器。处理它并保存到Etcd。
kube-controller-manager:处理集群内的常规后台事务。一个资源对应一个控制器,控制器管理器负责管理这些控制器。
kube-scheduler:根据算法选择新创建的Pode节点。
Node节点组件
kubelet:kubelet 是节点上master 的代理,执行本地运行容器的生命周期,包括创建容器、在pod 上挂载数据卷、下载机密以及获取容器和节点状态管理。 kubelet 将每个pod 转换为一组容器。
kube-proxy:在节点上实现pod 网络代理,以维护网络规则和四层负载均衡。
容器处理:运行Container Engine、Docker、containerd、podman等容器。
kubeadm搭建一个简单的集群
硬件配置
学习环境:
主控-2C/2G/20G
节点2C/2G/20G
测试环境:
主控-4C/8G/50G
节点-8C/16G/100G
生产环境:
Master-8C/16G/500G
节点-16C/32G/1T
环境准备
操作系统:CentOS7.9-x86_64Docker版本:26.1.4(CE)kubernetes:1.28
服务器规划
主机名ipk8s-master192.168.3.10k8s-node1192.168.3.11k8s-node2192.168.3.12
操作系统初始化配置
#关闭防火墙
systemctl 停止防火墙。 systemctl 禁用防火墙。
#关闭塞利纳克斯
设置力0
sed -i \’s/SELINUX=enforcing/SELINUX=disabled/\’ /etc/selinux/config
#关闭交换分区
sed -ri \’s@(.*swap.*)@#\\1@g\’ /etc/fstab
#更改主机名
hostnamectl set-hostname 主机名
修改#hosts文件(无需配置)
猫/etc/hosts EOF
192.168.3.10 k8s-master
192.168.3.11 k8s-node1
192.168.3.12 k8s-node2
结束后
#要启用内核ipv4转发,需要加载overlay和br_netfilter模块,运行以下命令:
cat /etc/modules-load.d/k8s.conf EOF
覆盖
br_net过滤器
结束后
modprobe覆盖
modprobe br_netfilter
#配置内核参数以将桥接的IPv4 流量传递到iptables 链
猫/etc/sysctl.d/k8s.conf EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
结束后
sysctl -p /etc/sysctl.d/k8s.conf
#时间同步,阿里云时钟服务器集成配置
服务器ntp.aliyun.com iburst
安装docker
配置Docker 镜像源
# 步骤1: 安装一些必需的系统工具
sudo yum install -y yum-utils 设备映射器持久数据lvm2
# 步骤2: 添加软件源信息
sudo yum-config-manager –add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#步骤3
sudo sed -i \’s+download.docker.com+mirrors.aliyun.com/docker-ce+\’ /etc/yum.repos.d/docker-ce.repo
# 步骤4: 更新并安装Docker-CE
sudo yum makecache 快
sudo yum -y 安装docker-ce
配置图像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json -\’EOF\’
{
\’registry-mirrors\’:[\’https://5fid4glg.mirror.aliyuncs.com\’,\’https://docker.m.daocloud.io\’],
\’exec-opts\’: [\’native.cgroupdriver=systemd\’]
}
结束后
注意:这里的大多数镜像源都是两年前的。如您所知,Docker Hub 目前尚未公开,但它足以学习。
\”exec-opts\” : [\”native.cgroupdriver=systemd\”] 此配置为官方推荐配置,无需更改。
“不安全的注册表”: 证书验证
配置完成后,加载配置文件,重新启动docker,并将其配置为开机自动启动。
重新加载systemctl 守护进程
systemctl 启用docker –now
安装cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14-3.el7.x86_64.rpm
如果由于网络原因无法下载,您可以科学地在线下载,然后上传到您的机器上。
指定从属镜像的地址。
添加cri-docker.service配置文件:pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
# vi /usr/lib/systemd/system/cri-docker.service
.
[服务]
类型=通知
ExecStart=/usr/bin/cri-dockerd –container-runtime-endpoint fd://–pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
超时秒数=0
重启秒=2
重新启动=始终
.
重新加载systemctl 守护进程
在systemctl 中启用cri-docker –now
安装kubernetes组件
配置yum源
猫T 恤/etc/yum.repos.d/kubernetes.repo
[库伯内特]
名称=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
有效=1
gpg检查=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
结束后
安装指定版本的kubeadm、kubelet 和kubectl 组件
kubeadm:初始化集群工具
kubelet:在集群中的每个节点上用于启动pod、容器等。
kubectl:用于与集群通信的命令行工具(只需安装在管理节点上即可)
百胜安装kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 -y
配置kubelet 服务开机自动启动
使用systemctl –now 启用kubelet
配置Master节点
在主节点上运行
kubeadm 初始化\\
–apiserver-advertise-address=\’192.168.3.10\’ \\
–image-repositoryregistry.aliyuncs.com/google_containers \\
–kubernetes-版本v1.28.0 \\
–service-cidr=10.96.0.0/16 \\
–pod-network-cidr=10.244.0.0/16 \\
–cri-socket=unix:///var/run/cri-dockerd.sock
apiserver-advertise-address 集群广告地址,或者监听地址image-repositoryregistry.aliyuncs.com/google_containers 默认为k8s.gcr.io,国内无法访问。阿里云镜像仓库地址。此处指定kubernetes-version v1.28.0。 k8s版本与机器上安装的版本匹配 service-cidr=10.96.0.0/16 集群内部虚拟网络,pod统一访问入口 pod-network-cidr=10.244 .0.0/16 pod网络,CNI网络组件yanl要保留一致cri-socket=unix:///var/run/cri-dockerd.sock 指定接口ignore-preflight-errors=all 忽略警告
这里的执行可能非常慢,因为它必须从镜像站检索图像。如果你觉得速度慢,你也可以尝试先获取图像,然后初始化它。
拉取kubeadm 配置镜像\\
–image-repositoryregistry.aliyuncs.com/google_containers \\
–kubernetes-版本v1.28.0 \\
–cri-socket=unix:///var/run/cri-dockerd.sock
整个流程如下:
[root@k8s-master ~]# kubeadm init \\
–apiserver-advertise-address=\’192.168.3.10\’ \\
–image-repositoryregistry.aliyuncs.com/google_containers \\
–kubernetes-版本v1.28.0 \\
–service-cidr=10.96.0.0/16 \\
–pod-network-cidr=10.244.0.0/16 \\
–cri-socket=unix:///var/run/cri-dockerd.sock
[init] 使用Kubernetes 版本: v1.28.0
[预检] 执行预检检查
[预检] 拉取设置Kubernetes 集群所需的镜像
[预检] 这可能需要1-2 分钟,具体取决于您的互联网连接速度
[预检] 您还可以使用“kubeadm config Images pull”提前执行此操作
[证书] 使用证书目录文件夹“/etc/kubernetes/pki”
[certs] 生成“ca”证书和密钥
[certs] 生成“apiserver”证书和密钥
[证书] apiserver 服务证书是针对DNS 名称[k8s-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] 和IP [10.96.0.1 192.168.3.10] 进行签名的。
[certs] 生成“apiserver-kubelet-client”证书和密钥
[certs] 生成“front-proxy-ca”证书和密钥
[certs] 生成“前端代理客户端”证书和密钥
[certs] 生成“etcd/ca”证书和密钥
[certs] 生成“etcd/server”证书和密钥
[证书] etcd/server 提供的证书针对DNS 名称[k8s-master localhost] 和IP [192.168.3.10 127.0.0.1 :1] 进行签名。
[certs] 生成“etcd/peer”证书和密钥
[证书] etcd/对等服务证书针对DNS 名称[k8s-master localhost] 和IP [192.168.3.10 127.0.0.1 :1] 进行签名。
[certs] 生成“etcd/healthcheck-client”证书和密钥
[certs] 生成“apiserver-etcd-client”证书和密钥
[certs] 生成“sa”密钥和公钥
[kubeconfig] kubeconfig 文件夹“/etc/kubernetes”的使用
[kubeconfig] \’admin.conf\’ 写入kubeconfig 文件
[kubeconfig] 编写kubelet.conf kubeconfig 文件
[kubeconfig] 编写“controller-manager.conf”kubeconfig 文件
[kubeconfig] 写入“scheduler.conf”kubeconfig 文件
[etcd] 在“/etc/kubernetes/manifests”中为本地etcd 创建静态pod 清单
[控制平面] 使用清单文件夹“/etc/kubernetes/manifests”
[control-plane] 为“kube-apiserver”创建静态pod 清单
[控制平面] 为“kube-controller-manager”创建静态pod 清单
[控制平面] 为“kube-scheduler”创建静态pod 清单
将包含[kubelet-start] 标志的kubelet 环境文件写入文件“/var/lib/kubelet/kubeadm-flags.env”
[kubelet-start] 将kubelet 配置写入文件“/var/lib/kubelet/config.yaml”
[kubelet-start] 启动kubelet
[wait-control-plane] 等待kubelet 从目录“/etc/kubernetes/manifests”中将控制平面作为静态pod 启动。这可能最多需要4 分钟。
[apiclient] 所有控制平面组件在10.504564 秒后恢复正常
[upload-config] 将ConfigMap \’kubeadm-config\’ 使用的配置保存到\’kube-system\’ 命名空间
[kubelet] 使用集群中kubelet 的配置在命名空间kube-system 中创建ConfigMap \’kubelet-config\’
跳过[upload-certs] 阶段。请参阅–上传证书。
[mark-control-plane] 通过添加label: 将节点k8s-master 标记为控制平面[node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]
[mark-control-plane] 添加污点以将节点k8s-master 标记为控制平面[node-role.kubernetes.io/control-plane:NoSchedule]
[引导令牌] 使用token: twzwgv.xqhb98gfu1edpm62
[bootstrap-token] 配置bootstrap token、集群信息ConfigMap、RBAC角色
[bootstrap-token] 配置RBAC 规则以允许节点引导令牌检索节点
[bootstrap-token] 配置RBAC 规则以允许节点引导令牌发布CSR,以便节点可以获得长期证书凭证。
[bootstrap-token] 配置RBAC 规则以允许csrapprover 控制器自动批准来自节点引导令牌的CSR
[bootstrap-token] 配置RBAC 规则以允许集群中所有节点的客户端证书轮换
[bootstrap-token] 在“kube-public”命名空间中创建“cluster-info”ConfigMap
[kubelet-finalize] 更新“/etc/kubernetes/kubelet.conf”以指向可旋转的kubelet 客户端证书和密钥
[附加组件] 必需附加组件: CoreDNS
[插件] 必需插件: kube-proxy
Kubernetes 控制平面已成功初始化。
要开始使用集群,您需要以普通用户: 身份运行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果您是root 用户,则可以运行:
导出KUBECONFIG=/etc/kubernetes/admin.conf
现在您需要将Pod 网络部署到集群。
使用: 中列出的选项之一运行“kubectl apply -f [podnetwork].yaml”。
https://kubernetes.io/docs/concepts/cluster-administration/addons/
然后,您可以通过以root: 在每个工作节点上运行以下命令来加入任意数量的工作节点:
kubeadm 加入192.168.3.10:6443 –token twzwgv.xqhb98gfu1edpm62 \\
–discovery-token-ca-cert-hash sha256:43eff3fcb345a6138ae9254d60b219cd04dd5e18cc2910d0eb52db209bb93b26
[root@k8s-master ~]#
复制kubeconfig 配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/conf
ig
sudo chown $(id -u):$(id -g) $HOME/.kube/config
将Node节点加入集群
在node节点执行
kubeadm join 192.168.3.10:6443 –token twzwgv.xqhb98gfu1edpm62 \\
–discovery-token-ca-cert-hash sha256:43eff3fcb345a6138ae9254d60b219cd04dd5e18cc2910d0eb52db209bb93b26 \\
–cri-socket=unix:///var/run/cri-dockerd.sock
为了安全性,kubeadm生成的token,默认有效期为24小时,过期之后就无法使用了,需要重新生成加入节点命令:
kubeadm token create –print-join-command
部署容器网络
提前下载好calico的镜像文件,导入所有节点
ls *.tar | xargs -i docker load -i {}
在master节点使用yaml文件创建pod
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml
注意:按官方给的做法,是直接使用yaml文件然后在线下载,必须保证镜像源的访问速度才行。不然需要很久很久
到这里,集群就算是搭建完成了
[root@localhost ~]# kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-85955d4f5b-rlrrg 1/1 Running 0 21s
calico-node-gvv4h 1/1 Running 0 21s
calico-node-mhkxp 0/1 Running 0 21s
calico-node-z9czg 1/1 Running 0 21s
calico-typha-6dfcdf98b5-984zj 1/1 Running 0 22s
calico-typha-6dfcdf98b5-pvg5j 1/1 Running 0 18s
csi-node-driver-b5h5x 2/2 Running 0 21s
csi-node-driver-htgqx 2/2 Running 0 21s
csi-node-driver-js88m 2/2 Running 0 21s
[root@localhost ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 4h4m v1.28.0
k8s-node1 Ready <none> 4h2m v1.28.0
k8s-node2 Ready <none> 4h2m v1.28.0
Master节点命令自动补全
yum install bash-completion -y
echo \’source <(kubectl completion bash)\’ >>~/.bashrc
#以上关于Linux容器篇的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92833.html