Kubernetes集群 v1.27.3
1|0生产级别的容器编排系统
Kubernetes 介绍
传统部署时代:
早期,各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。 例如,如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。 一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序, 而且维护许多物理服务器的成本很高。 |
虚拟化部署时代:
因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序, 而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。 通过虚拟化,你可以将一组物理资源呈现为可丢弃的虚拟机集群。每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。 |
容器部署时代:
容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。 容器因具有许多优势而变得流行起来,例如:
|
Kubernetes 作用:
容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些? Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。 |
Kubernetes 提供:
|
2|0基础环境
三个节点均需操作,以k8s-master为例
主机节点 | 进程 | IP配置 | 操作系统 |
---|---|---|---|
k8s-master | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | Net:10.10.20.10 | Centos8-Stream |
k8s-worker01 | docker,kubelet,kube-proxy,calico | Net:10.10.20.20 | Centos8-Stream |
k8s-worker02 | docker,kubelet,kube-proxy,calico | Net:10.10.20.30 | Centos8-Stream |
2|1主机名配置与IP映射
2|2SSH-Key密钥认证
2|3IP路由转发开启,转发 IPv4
2|4配置yum源
2|5配置ipvs功能
在kubernetes中Service有两种代理模型,⼀种是基于iptables的,⼀种是基于ipvs,两者对⽐ipvs的性能要⾼,如果想要使⽤ipvs模型,需要⼿动载⼊ipvs模块
2|6关闭Swap分区,防火墙,SeLinux
2|7验证基础配置
3|0Docker
k8s是容器编排工具,需要容器管理工具,三个节点同时安装docker
二进制包下载地址:https://download.docker.com/linux/static/stable/x86_64/
3|1安装Docker
3|2配置docker镜像加速器
3|3配置Cgroup驱动程序
在 Linux 上,控制组(CGroup)⽤于限制分配给进程的资源,官⽅建议配置容器运⾏时和 kubelet 使⽤ systemd(systemd是Linux系统第⼀个初始进程)作为容器的控制组(CGroup), 以此使系统更为稳定 。
3|4配置docker服务
3|5启动docker服务
3|6查看版本和信息
4|0cri-docker
Kubernetes1.24以及更高版本已不支持docker,所以要安装cri-docker
4|1安装cri-docker
4|2配置cri-docker服务
4|3启动cri-docker服务
4|4查看cri-docker状态
5|0kubelet,kubeadm,kubectl
三个节点都需安装kubelet,kubeadm,kubectl
介绍:
Kubelet 是 kubernetes 工作节点上的一个代理组件,运行在每个节点上
Kubeadm 是一个快捷搭建kubernetes(k8s)的安装工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令来快速创建 kubernetes 集群,kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群
Kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署
5|1安装kubelet,kubeadm,kubectl
5|2设置kubelet开机自启动
6|0kubeadm初始化
6|1查看版本
6|2初始化开始(仅在k8s-master上执行)
--image-repository registry.aliyuncs.com/google_containers:使用阿里云镜像仓库
--kubernetes-version=v1.27.3:指定k8s的版本
--pod-network-cidr=192.168.0.0/24:指定pod的网段(默认网段)--cri-socket unix:///var/run/cri-dockerd.sock:指定容器运行时的Socket文件路径,原本默认是dockershim.sock,但现在改成cri-docker.sock
6|3根据初始化指示,创建kubeconfig文件
6|4Worker节点加入集群(在k8s-worker01,k8s-worker02执行)
6|5回到主节点上查看(仅在k8s-master上执行)
6|6Calico安装
安装参考网址:https://projectcalico.docs.tigera.io/about/about-calico
1,安装Tigera Calico操作员和自定义资源定义
2,通过创建必要的自定义资源来安装Calico
3,使用以下命令确认所有pod都在运行
4,验证集群中master节点的可用性
5,查看集群健康情况,理想状态
6,查看kubernetes集群pod运⾏情况
7,再次查看calico-system命名空间中pod运⾏情况
7|0部署nginx网页测试
8|0Dashboard界面
摘要:Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。 例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。Dashboard 同时展示了 Kubernetes 集群中的资源状态信息和所有报错信息
听雨:本次只讲安装配置,至于操作,哎呀自己慢慢玩 😘
8|1下载yaml文件
8|2修改yaml文件
由于未指定Service的type,而它默认的type是ClusterIP,这会导致它无法被外界所访问,因此要在Service那一栏下面指定type为NodePort,命令查看:kubectl explain Service.spec.type
8|3执行
8|4查看pod和svc
8|5创建服务帐户和ClusterRoleBinding
8|6获取令牌
8|7将生成的token输入即可进入Dashboard管理界面
8|8清理,删除管理员ServiceAccount和集群角色绑定
8|9关于查询token
说明:在以前的版本中,可以通过类似于kubectl get secret -n kubernetes-dashboard | grep token | grep admin的命令先查询secret,再使用kubectl describe secret <上条命令查询的结果> -n kubernetes-dashboard即可显示token信息,但现如今版本(我也不知道从哪个版本开始的)这种方式查看无效,并且kubectl get secret -n kubernetes-dashboard也不会显示,所以这里建议生成了token就创建一个文件复制到里面保存下来,如:
查询操作有待研究,各位若是知道查询方法,欢迎在评论留言,感谢各位看官老爷!!😋
9|0K8s资源管理方式介绍
kubernetes的本质是⼀个集群系统,用户可以在集群中部署各种服务,每个服务存在于集群各个容器中,而在kubernetes中,所有内容都被抽象为资源对象,以下命令查看所有资源:
9|1K8s资源类型介绍
资源名称 | 缩写 | 资源作用 |
---|---|---|
nodes | no | 集群组成部分 |
namespaces | ns | 资源隔离(隔离pod) |
pods | po,pod | 装载容器 |
replicationcontrollers | rc | 控制pod资源 |
replicasets | rs | 控制pod资源 |
deployments | deploy | 控制pod资源 |
daemonsets | ds | 控制pod资源 |
jobs | 控制pod资源 | |
cronjobs | cj | 控制pod资源 |
horizontalpodautoscalers | hpa | 控制pod资源 |
statefulsets | sts | 控制pod资源 |
services | svc | 统一pod对外接口 |
ingress | ing | 统一pod对外接口 |
volumeattachments | 存储资源 | |
persistentvolumes | pv | 存储资源 |
persistentvolumeclaims | pvc | 存储资源 |
configmaps | cm | 配置资源 |
secrets | 配置资源 |
9|2集群管理方式介绍
- 直接使用kubectl命令去管理k8s集群
- 将配置写入到yaml文件,通过文件去管理k8s集群
9|3kubectl命令介绍
kubectl是kubernetes集群的命令行工具,通过它能过够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署,可通过--help获取命令帮助:
kubectl常用命令如下:
命令 | 作用 |
---|---|
create | 创建⼀个资源 |
edit | 编辑⼀个资源 |
get | 获取⼀个资源 |
patch | 更新⼀个资源 |
delete | 删除⼀个资源 |
explain | 展示资源文档 |
run | 在集群中运行⼀个指定的镜像 |
expose | 暴露资源为service |
descibe | 显示资源内部信息 |
logs | 输出容器在pod中的日志 |
attach | 进⼊运行中的容器 |
exec | 执行容器中的一个命令 |
cp | 在pod内外复制⽂件 |
rollout | 管理资源的发布 |
scale | 扩(缩)容pod的数量 |
autoscale | 自动调整pod的数量 |
apply | 通过文件对资源进行配置 |
label | 更新资源上的标签 |
cluster-info | 显示集群信息 |
version | 显示当前Server和Client版本信息 |
格式:kubectl [command] [type] [name] [flags]
- command:指定要对资源执行的操作,例如:create、get、delete
- type:指定资源类型,例如:deployment、pod、service
- name:指定资源名称,名称区分大小写
- flags:指定额外的可选参数
9|4kubectl命令练习
资源名称 | 缩写 | 资源作用 |
---|---|---|
pods | po,pod | 装载容器 |
9|5kubectl命令补齐
听雨:如果在其他node节点需要使用kubectl命令需要先执行以下操作 ↓,再执行上述操作 ↑
k8s-worker01测试命令补全是否可用
10|0未完待续
部署仍在进行中.....
__EOF__

本文链接:https://www.cnblogs.com/skyrainmom/p/17517594.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库