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

Kubernetes简介及部署

简介

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年Borg系统运行管理着成千上万的容器应用。

Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

核心定位与价值

Kubernetes 解决了 “容器多了怎么管” 的问题。在单容器或少量容器场景下,手动操作即可,但当应用拆分为成百上千个容器、分布在多台服务器(节点)时,就需要 K8s 提供的自动化能力:

  • 自动部署:按配置批量启动容器,确保容器在指定节点上运行。

  • 故障自愈:容器崩溃、节点下线时,自动在其他节点重启容器,维持应用可用性。

  • 弹性伸缩:根据 CPU 使用率、请求量等指标,自动增加或减少容器数量(扩缩容)。

  • 负载均衡:为容器分配访问地址,自动分发请求到多个容器,避免单点压力过大。

  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

  • 存储编排:可以根据容器自身的需求自动创建存储卷

核心组件架构

K8s 集群分为 “控制平面” 和 “节点(工作节点)” 两部分,组件分工明确:

组件类型核心组件作用
控制平面master集群 “入口”,所有操作(如创建 Pod、查看状态)都通过它执行,提供 API 接口。
etcd集群 “数据库”,存储所有集群配置和状态数据(如 Pod 信息、节点信息)。
kube-controller-manager运行各种控制器(如节点控制器、Pod 控制器),实现故障自愈、扩缩容等逻辑。
kube-scheduler负责 “调度”:根据容器的资源需求(如 CPU、内存),选择合适的节点运行 Pod。
工作节点kubelet节点上的 “管家”,确保容器按配置运行(如启动、停止容器,监控容器状态)。
kube-proxy节点上的 “网络代理”,实现 Pod 之间、Pod 与外部的网络通信,提供负载均衡。
容器运行时(如 containerd)实际运行容器的工具,K8s 通过接口调用它创建、管理容器(替代早期的 Docker)。

核心资源概念

K8s 通过 “资源” 定义应用的运行规则,常用核心资源包括:

  • Pod:K8s 的最小部署单元,一个 Pod 可包含 1 个或多个紧密关联的容器(如应用容器 + 日志收集容器),共享网络和存储。

  • Deployment:管理 Pod 的 “控制器”,通过 Deployment 可定义 Pod 的数量、镜像版本,支持滚动更新(更新时不中断服务)、回滚等操作。

  • Service:为一组 Pod 提供固定访问地址(如 ClusterIP、NodePort),即使 Pod 重启、IP 变化,外部也能通过 Service 稳定访问。

  • ConfigMap/Secret:存储配置信息的资源,ConfigMap 存明文配置(如数据库地址),Secret 存敏感信息(如密码、Token),避免配置硬编码到镜像。

典型使用流程

  1. 准备集群:通过kubeadm、云服务商(如 AWS EKS、阿里云 ACK)等方式搭建 K8s 集群(1 个控制平面节点 + 多个工作节点)。

  2. 定义资源

    :用 YAML 文件描述应用的运行规则(如 Deployment、Service),示例如下:

    yaml

     # deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: my-appspec:replicas: 3  # 运行3个Pod副本selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-appimage: my-app:v1  # 应用镜像ports:- containerPort: 80  # 容器暴露端口
  3. 部署应用:执行kubectl apply -f deployment.yaml,K8s 会自动创建 3 个 Pod 并运行。

  4. 管理与监控:用kubectl get pods查看 Pod 状态,kubectl scale deployment my-app --replicas=5扩缩容,通过 Prometheus+Grafana 等工具监控集群和应用状态。

K8S集群环境搭建

k8s中容器的管理方式

K8S 集群创建方式有3种:

centainerd

默认情况下,K8S在创建集群时使用的方式

docker

Docker使用的普记录最高,虽然K8S在1.24版本后已经费力了kubelet对docker的支持,但时可以借助cri-docker方式来实现集群创建

cri-o

CRI-O的方式是Kubernetes创建容器最直接的一种方式,在创建集群的时候,需要借助于cri-o插件的方式来实现Kubernetes集群的创建

k8s 集群部署

部署环境
主机名IP角色
harbor192.168.188.144harbor仓库
master192.168.188.141master控制节点
node1192.168.188.142worker工作节点
node2192.168.188.143worker工作节点

所有节点禁用selinux和防火墙

所有节点同步时间和解析

所有节点安装docker-ce

所有节点禁用swap,注意注释掉/etc/fstab文件中的定义

集群环境初始化
所有节点禁用swap和本地解析
systemctl disable --now swap.targetsystemctl mask swap.targetswapoff -avim /etc/fstab## /etc/fstab# Created by anaconda on Sat Jul  5 11:53:44 2025## Accessible filesystems, by reference, are maintained under '/dev/disk/'.# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.## After editing this file, run 'systemctl daemon-reload' to update systemd# units generated from this file.#/dev/mapper/rhel-root   /                       xfs     defaults        0 0UUID=bc78d041-d595-49ac-974b-de6d803ea6ed /boot                   xfs     defaults        0 0UUID=244F-200C          /boot/efi               vfat    umask=0077,shortname=winnt 0 2#/dev/mapper/rhel-swap   none                    swap    defaults        0 0   #加#注释swap vim /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.188.144 reg.timinglee.org192.168.188.141 master192.168.188.142 node1192.168.188.143 node2
所有安装docker
vim /etc/yum.repos.d/docker.repo[docker]name=dockerbaseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/gpgcheck=0dnf install docker-ce -y
所有节点设定docker的资源管理模式为systemd
 vim /etc/docker/daemon.json{"registry-mirrors": ["https://reg.timinglee.org"]}
部署harbor
 
#生成认证key和证书[root@docker ~]# mkdir certs[root@docker ~]#  openssl req -newkey  rsa:4096 \-nodes -sha256 -keyout /root/certs/timinglee.org.key \-addext "subjectAltName = DNS:reg.timinglee.org" \      #指定备用名称-x509 -days 365 -out /root/certs/timinglee.org.crt​You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:ShaanxiLocality Name (eg, city) [Default City]:Xi'anOrganization Name (eg, company) [Default Company Ltd]:timingleeOrganizational Unit Name (eg, section) []:dockerCommon Name (eg, your name or your server's hostname) []:reg.timinglee.orgEmail Address []:admin@timinglee.org
 
[root@docker ~]# tar zxf harbor-offline-installer-v2.5.4.tgz[root@docker ~]# lsanaconda-ks.cfg  certs   harbor-offline-installer-v2.5.4.tgzauth             harbor[root@docker ~]# cd harbor/​​[root@docker harbor]# cp harbor.yml.tmpl harbor.yml[root@docker harbor]# vim harbor.yml​hostname: reg.timinglee.orgcertificate: /root/certs/timinglee.org.crtprivate_key: /root/certs/timinglee.org.keyharbor_admin_password: lee​[root@docker harbor]# ./install.sh --help​​Please set --with-notary                #证书签名Please set --with-trivy                 #安全扫描Please set --with-chartmuseum if needs enable Chartmuseum in Harbor​​[root@docker harbor]# ./install.sh --with-chartmuseum

所有阶段复制harbor仓库中的证书并启动docker
[root@harbor ~]# scp /root/certs/certs/timinglee.org.crt root@192.168.188.141:/etc/docker/certs.d/reg.timinglee.org...[root@master ~]#systemctl enable --now docker[root@master ~]# docker login reg.timinglee.org
安装K8S部署工具
[root@master ~]# vim /etc/yum.repos.d/k8s.repo[k8s]name=k8sbaseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpmgpgcheck=0#安装软件[root@master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y#设置kubectl命令补齐功能[root@master ~]# dnf install bash-completion -y[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc[root@master ~]# source ~/.bashrc
在所节点安装cri-docker

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker

软件下载:https://github.com/Mirantis/cri-dockerd

 [root@master ~]# yum insatll *.rpm -y[root@master ~]# vim /lib/systemd/system/cri-docker.service[Unit]Description=CRI Interface for Docker Application Container EngineDocumentation=https://docs.mirantis.comAfter=network-online.target firewalld.service docker.serviceWants=network-online.targetRequires=cri-docker.socket​[Service]Type=notifyExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9ExecReload=/bin/kill -s HUP $MAINPIDTimeoutSec=0RestartSec=2Restart=always[root@master ~]# systemctl daemon-reload[root@master ~]# systemctl start cri-docker
在master节点拉取K8S所需镜像
#拉取k8s集群所需要的镜像[root@k8s-master ~]# kubeadm config images pull \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.30.0 \--cri-socket=unix:///var/run/cri-dockerd.sock#上传镜像到harbor仓库[root@master ~]# docker images | awk '/google/{ print $1":"$2}' \| awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'[root@master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'

集群初始化
 #启动kubelet服务[root@master ~]# systemctl enable --now kubelet.service#执行初始化命令[root@master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \--image-repository reg.timinglee.org/k8s \--kubernetes-version v1.30.0 \--cri-socket=unix:///var/run/cri-dockerd.sock#指定集群配置文件变量[root@master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile#当前节点没有就绪,因为还没有安装网络插件,容器没有运行[root@master ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONharbor NotReady control-plane 4m25s v1.30.0

在此阶段如果生成的集群token找不到了可以重新生成

 [root@master ~]# kubeadm token create --print-join-commandkubeadm join 172.25.254.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery-token-ca-cert-hashsha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23

安装flannel网络插件

 #下载flannel的yaml部署文件[root@master ~]# wget https://github.com/flannel•io/flannel/releases/latest/download/kube-flannel.yml#下载镜像:[root@master ~]# docker pull docker.io/flannel/flannel:v0.25.5[root@master ~]# docekr docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1#上传镜像到仓库[root@master ~]# docker tag flannel/flannel:v0.25.5 \reg.timinglee.org/flannel/flannel:v0.25.5[root@master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5[root@master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 \reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1[root@master ~]# docker push reg.timinglee.org/flannel/flannel-cni•plugin:v1.5.1-flannel1#编辑kube-flannel.yml 修改镜像下载位置[root@master ~]# vim kube-flannel.yml#需要修改以下几行[root@master ~]# grep -n image kube-flannel.yml146: image: reg.timinglee.org/flannel/flannel:v0.25.5173: image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1184: image: reg.timinglee.org/flannel/flannel:v0.25.5#安装flannel网络插件[root@master ~]# kubectl apply -f kube-flannel.yml

节点加入集群

[root@node1 & 2 ~]# kubeadm join 192.168.188.144:6443 --token5hwptm.zwn7epa6pvatbpwf --discovery-token-ca-cert-hashsha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --cri-socket=unix:///var/run/cri-dockerd.sock

在master阶段中查看所有node的状态

 [root@master ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONreg.timinglee.org Ready control-plane 98m v1.30.0node1 Ready <none> 21m v1.30.0node2 Ready <none> 21m v1.30.0

小结

本文介绍了Kubernetes集群的搭建过程。Kubernetes作为容器编排系统,源自Google的Borg系统,能够管理大规模容器化应用。文章详细说明了K8s的核心组件架构、资源概念,并重点演示了基于三节点(1主2工作)的集群部署流程,包括环境准备、Harbor私有仓库搭建、CRI-Docker插件安装、K8s组件初始化以及Flannel网络插件配置等关键步骤。最后通过节点加入命令完成集群构建,并验证节点状态。该方案为企业级容器化应用部署提供了完整的参考实现。

http://www.dtcms.com/a/500711.html

相关文章:

  • 肤契:全域协议版 九 血鉴录现世
  • 个人公司网站模板wordpress的搜索插件
  • zabbix监控进程、日志、mysql主从
  • MyBatis—增删查改操作
  • 扬州润扬交通建设集团网站做网站排名优化是怎么回事
  • 无锡企业推广网站网站建设策划书范文
  • 一个网站如何做双语安徽网络公司排名
  • 聊天室项目开发——安装并使用gtest库以及spdlog日志组件
  • 桐乡建设局网站智能建站服务平台
  • Altium Designer(AD24)View视图功能总结
  • 国产麒麟系统门禁主板--XC3576IC,以AI芯赋能多元生物识别生态
  • 梅州做网站设计公司微信怎么建立公众号
  • 中国企业网络营销实例郑州网站优化平台
  • 关于建立网站的思路免费建立网站软件
  • 宁波网站建设详细内容在线课程设计
  • 网站建设代码下载大全wordpress左侧菜单
  • 商业网站建设规划书自我做t恤的网站
  • 企业网站备案名称要求做外汇网站做什么类型网站好
  • 能从源代码黑进网站修改数据吗字体升级wordpress
  • a站播放量最高的视频测评网站架构
  • java.text 包详解
  • 做贸易选哪家网站精品资源共享课网站建设 碧辉腾乐
  • Kubernetes日志管理:使用Loki进行日志采集
  • 代人做网站建设厅质监总站网站
  • claude-code使用figmamcp
  • 红黑树详细介绍(五大规则、保持平衡操作、Java实现)
  • 上海装修网站大全福田商城网站建设
  • 边学边用之Scrapy中使用xpath获取类元素问题
  • 网站怎样做seo南京seo网站优化
  • switch case语句 密集连续值 - 可能生成跳转表 汇编分析