当前位置: 首页 > news >正文

Kubernetes概述与部署

Kubernetes概述介绍

目录
  • Kubernetes概述介绍
    • Kubernetes 运行机制
    • Kubernetes环境搭建部署
      • 环境初始化安装docker
      • 安装cri-docker
      • kubeadm官方部署

Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。 Kubernetes基于docker容器的云平台,简写成:k8s

  • 官方网站:http://www.kubernetes.io
  • 官方文档:https://kubernetes.io/zh/docs/home/

Kubernetes架构由管理节点和工作节点,以及一个键值存储系统(Etcd)组成,如图所示

image

Master节点组件:Master 节点是 Kubernetes 集群的控制节点,负责整个集群的管理和控制,Master节点上包含以下组件:

  • etcd:一个分布式键值存储系统,用于存储Kubernetes集群的数据。etcd由CoreOS开源,它并不属于Kubernetes集群自身,因此etcd可以在集群之外独立部署。

  • kube-apiserver: Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储

  • kube-scheduler:负责 Pod 的调度,根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上等等,这些控制器负责维护集群中的不同方面,确保整个集群的状态符合预期

  • kube-controller-manager:集群中所有资源对象的自动化控制中心,处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。例如Deployment、Service这些控制器包括但不限于:

    • Node Controller(节点控制器):负责监控节点状态,当节点出现故障时进行响应。

    • Replication Controller(副本控制器):负责确保特定数量的Pod副本在集群中运行。

    • Job Controller(任务控制器):负责监控Job对象,并生成相应Pod来执行任务。

    • Endpoint Controller(端点控制器):负责管理Service相应的Endpoint对象中关联正确的Pod IP地址。

Node节点:Node 节点是 Kubernetes 集群中的工作节点,Node 上的工作负载由 Master 节点分配,工作负载主要是运行容器应用,Node 节点上包含以下组件:

  • kubelet:负责 Pod 的创建、启动、监控、重启、销毁等工作,同时与 Master 节点协作,实现集群管理的基本功能。

  • kube-proxy:实现 Kubernetes Service 的通信和负载均衡.提供网络管理。

  • Pod: Pod是 Kubernetes 最基本的部署调度单元。每个 Pod 可以由一个或多个业务容器和一个根容器(Pause 容器)组成。一个 Pod 表示某个应用的一个实例

  • ReplicaSet:是 Pod 副本的抽象,用于解决 Pod 的扩容和伸缩。 Replica复制品

  • Deployment: Deployment表示部署,在内部使用ReplicaSet 来实现。可以通过Deployment 来生成相应的 ReplicaSet 完成 Pod 副本的创建

  • Service: Service 是 Kubernetes 最重要的资源对象。Service 定义了服务的访问入口,服务的调用者通过这个地址访问 Service 后端的 Pod 副本实例。Service 通过 Label Selector 同后端的 Pod 副本建立关系,Deployment 保证后端Pod 副本的数量,也就是保证服务的伸缩性

Kubernetes 运行机制

image

Kubernetes环境搭建部署

文中所需资料包已上传至百度网盘
链接: https://pan.baidu.com/s/1TFEffiWjAhdIhzhEKnFilg 提取码: g3pw

环境初始化安装docker

#清空Iptables默认规则
[root@k8s-master ~]# iptables -F#关闭SELinux(将配置文件“/etc/selinux/config”中“SELINUX”字段值设置为“disabled”)
[root@k8s-master ~]# vim /etc/selinux/config#关闭交换分区(将系统表文件“/etc/fstab”中文件系统类型为“swap”的行注释)
[root@k8s-master ~]# vim /etc/fstab #配置内核参数
#某些Kubernetes网络插件可能会用到网络桥接(Bridge),为了确保网络桥接的数据包经过Iptables处理,启用相关的内核参数:
[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
#配置生效
[root@k8s-master ~]# sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
* Applying /etc/sysctl.conf ...#配置阿里云yum源
[root@k8s-master ~]# rm -rf /etc/yum.repos.d/*
[root@k8s-master ~]# curl https://mirrors.aliyun.com/repo/Centos-7.repo -o /etc/yum.repos.d/CentOS-Base.repo% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100  2523  100  2523    0     0  17187      0 --:--:-- --:--:-- --:--:-- 17280
[root@k8s-master ~]# ll /etc/yum.repos.d/
total 4
-rw-r--r--. 1 root root 2523 Sep 16 21:59 CentOS-Base.repo#安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install -y docker-ce#配置镜像下载加速器
[root@k8s-master ~]# cat /etc/docker/daemon.json 
{"registry-mirrors": ["https://docker.ketches.cn","https://docker.1ms.run","https://hub1.nat.tf","https://docker.m.daocloud.io"]
}#设置开机自启动
systemctl start docker && systemctl enable docker

安装cri-docker

在Kubernetes早期版本中1.24版本之前工作流程,Docker作为默认容器运行时,并在Kubelet程序中开发了一个名为“Dockershim”的代理程序,负责Kubelet与Docker通信,如图所示
image
随着Kubernetes生态系统的发展,涌现出多种容器运行时,例如containerd、cri-o、rkt等。为了支持这些容器运行时,Kubernetes引入CRI(Container Runtime Interface,容器运行时接口)标准,使得第三方容器运行时只需对接CRI即可与Kubernetes集成。后来,在Kubernetes 1.20版本发布时宣布:为了优化核心代码,减少维护负担,将在1.24版本中正式移除“Dockershim”,而当时Docker又不支持CRI,这就意味着Kubernetes无法再Docker作为容器运行时。Docker官方为了解决这个问题,与Mirantis公司合作,开发了一个名为“cri-dockerd”的代理程序,负责Kubelet与Docker通信,如图所示
image

[root@k8s-master ~]# ll
-rw-r--r--. 1 root root 9642368 Sep 16 21:56 cri-dockerd-0.3.2-3.el7.x86_64.rpm[root@k8s-master ~]# rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm 
Preparing...                          ################################# [100%]package cri-dockerd-3:0.3.2-3.el7.x86_64 is already installed#安装完成后,修改Systemd服务文件指定依赖的Pause镜像为国内镜像地址
[root@k8s-master ~]# 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
…
[root@k8s-master ~]# systemctl start cri-docker && systemctl enable cri-docker

kubeadm官方部署

  • 在所有节点上安装kubeadm、kubectl和kubelet组件。但这些软件包未包含在系统默认软件源中,需要额外配置Yum软件源,例如配置阿里云的软件源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key
EOF#安装指定版本kubeadm、kubectl和kubelet
yum install -y kubeadm-1.32.0 kubectl-1.32.0 kubelet-1.32.0systemctl enable kubelet
  • 在Master节点执行以下命令初始化Kubernetes管理节点

[root@k8s-master ~]# kubeadm init \
>   --apiserver-advertise-address=192.168.1.19 \
>   --image-repository=registry.aliyuncs.com/google_containers \
>   --kubernetes-version=v1.32.0 \
>   --pod-network-cidr=10.244.0.0/16 \
>   --service-cidr=10.96.0.0/12 \
>   --cri-socket=unix:///var/run/cri-dockerd.sock \
>   --ignore-preflight-errors=all#该命令中各参数含义如下:
--apiserver-advertise-address:指定API Server监听的IP地址。如果没有设置,将使用默认的网络接口。
--image-repository:指定镜像仓库地址。默认值为“registry.k8s.io”,但该仓库在国内无法访问,因此这里指定阿里云仓库。
--kubernetes-version:指定Kubernetes版本。
--pod-network-cidr:指定Pod网络的CIDR地址范围。
--service-cidr:指定Service网络的CIDR地址范围。
--cri-socket:指定kubelet连接容器运行时的Unix套接字文件。#命令执行后,kubeadm会执行一系列任务,大概如下:
[certs]:生成Kubernetes组件所需的HTTPS证书和秘钥,并存放到“/etc/kubernetes/pki”目录;
[kubeconfig]:生成kubeconfig文件,该文件包含API Server地址、客户端证书等信息,并存放到“/etc/kubernetes”目录。
[kubelet-start]:生成kubelet配置文件“/var/lib/kubelet/config.yaml”并启动kubelet服务。
[control-plane]:为kube-apiserver、kube-controller-manager和kube-scheduler创建静态Pod资源文件,并存储到“/etc/kubernetes/manifests”目录。
[etcd]:为etcd创建静态Pod资源文件,并存储到“/etc/kubernetes/manifests”目录。
[wait-control-plane]:等待kubelet从目录“/etc/kubernetes/manifest”中以静态Pod的形式启动Master组件。
[apiclient]:检查Master组件是否健康。
[upload-config]:将kubeadm配置存储到ConfigMap对象中。
[kubelet]:将kubelet配置存储到ConfigMap对象中。
[upload-certs]:提示用户跳过证书上传。
[mark-control-plane]:给Master节点添加标签和污点。
[bootstrap-token]:生成引导令牌,用于Node节点在加入集群时使用。
[kubelet-finalize]:更新kubelet配置文件(/etc/kubernetes/kubelet.conf)。
[addons]:安装CoreDNS和kube-proxy插件。#紧接着,输出初始化成功的信息
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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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 192.168.1.19:6443 --token yppgun.j5yxio8l5a5p5sw1 \--discovery-token-ca-cert-hash sha256:c9886aaf0e1ca8793095925eae2f0a4016f4c45d81a4da6055a57e7aea2c9b47 #根据上述提示,执行以下命令开始使用集群:
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config#这些命令是将文件“/etc/kubernetes/admin.conf”复制到“$HOME/.kube/config”,以便kubectl根据该配置文件连接和管理Kubernetes集群
  • 需要注意的是,Kubernetes考虑到安全性“kubeadm join”命令中的Token有效期为24小时,过期后不可再使用,届时可以在master节点上通过kubeadm token create --print-join-command命令创建新的Token,以添加新的工作节点。

[root@k8s-node1 ~]# kubeadm join 192.168.1.19:6443 --token yppgun.j5yxio8l5a5p5sw1 \
>    --discovery-token-ca-cert-hash sha256:c9886aaf0e1ca8793095925eae2f0a4016f4c45d81a4da6055a57e7aea2c9b47 \
>    --cri-socket=unix:///var/run/cri-dockerd.sock \
>    --ignore-preflight-errors=all
...
...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.#master节点查看node节点是否加入成功
[root@k8s-master ~]# kubectl get node
NAME         STATUS     ROLES           AGE     VERSION
k8s-master   NotReady   control-plane   7m21s   v1.32.0
k8s-node1    NotReady   <none>          40s     v1.32.0
k8s-node2    NotReady   <none>          4s      v1.32.0
  • 在上述结果中,节点状态显示为“NotReady”表示节点尚未准备就绪。这是由于kubelet服务未发现网络插件导致的,kubelet日志中也有相关说明(“network plugin is not ready”)Kubernetes网络插件主要用于实现集群内部Pod通信,它负责配置和管理Pod的网络。常见的网络插件包括Calico、Flannel、Cilium等,这里选择使用Calico作为Kubernetes网络插件,安装Calico网络插件:

[root@k8s-master ~]# ls
calico-operator.zip                 custom-resources.yaml  kubernetes-dashboard.yaml
cri-dockerd-0.3.2-3.el7.x86_64.rpm  hostname               tigera-operator.yaml
[root@k8s-master ~]# kubectl create -f tigera-operator.yaml
[root@k8s-master ~]# kubectl create -f custom-resources.yaml#网络插件容器都已经正常运行
[root@k8s-master ~]# kubectl get pods -n calico-system
NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-565599874f-ps5bn   1/1     Running   0             5m59s
calico-node-24rbz                          1/1     Running   0             5m59s
calico-node-84lh9                          1/1     Running   1 (80s ago)   5m59s
calico-node-dqhs7                          1/1     Running   0             5m59s
calico-typha-756df495cb-jh44l              1/1     Running   0             5m59s
calico-typha-756df495cb-zf846              1/1     Running   0             5m50s
csi-node-driver-822tz                      2/2     Running   0             5m59s
csi-node-driver-858f8                      2/2     Running   0             5m59s
csi-node-driver-m2wz6                      2/2     Running   0             5m59s#查看节点状态是否已准备就绪ready
[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   28m   v1.32.0
k8s-node1    Ready    <none>          21m   v1.32.0
k8s-node2    Ready    <none>          21m   v1.32.0
http://www.wxhsa.cn/company.asp?id=6496

相关文章:

  • XXII Open Cup : Grand Prix of Southeastern Europe
  • GNSS终端授时方式
  • SpringAI接入DeepSeek大模型实现流式对话
  • 通知语音播报功能,解锁全新体验
  • 使用AI容器镜像部署Qwen大语言模型
  • 【IEEE冠名,香港中文大学(深圳)主办)第五届IEEE能源工程与电力系统国际学术会议(IEEE-EEPS 2025)
  • C#实现Access表格自增ID的重置
  • 运用深度学习模型实现图像的分类
  • 设备ONVIF接入平台EasyCVR私有化视频平台级联到海康平台目录丢失根因定位
  • java 通过模板输出word
  • 【设计模式】单例模式 - 实践
  • ubuntu服务器docker容器启动java项目
  • 【2025最新】企业信息模糊搜索API设计与实践指南
  • 一键搞定本土认证难题,AnalyticDB版Supabase助力AI应用实现支付宝微信登录
  • sumifs根据条件求和
  • ubuntu服务器docker安装部署ngix
  • c++右值引用和移动语义
  • 彩笔运维勇闯机器学习--梯度下降法
  • 作业03
  • 项目管理软件产业革命:从工具升级到生产力范式转移
  • vs code运行Java遇到的输入问题
  • 关于数据跨境,你应该了解的合规难题有哪些?
  • 国内开发者如何选择代码管理平台?三大主流工具深度对比
  • doubletrouble wp复盘
  • VAR算法
  • mysql 万能恢复主从Slave_SQL_Running 是No
  • 刚刚 Java 25 炸裂发布!让 Java 再次伟大
  • go 语言结构和基础语法
  • 详细介绍:Linux--初识网络
  • lua程序调试方法