Ubantu docker学习笔记(十一)k8s基本操作

news2024/11/25 2:42:28

文章目录

  • 一、K8s介绍
  • 二、容器编排
    • 2.1 部署应用
    • 2.2 了解应用
    • 2.3 公开暴露应用
    • 2.4 扩缩应用
    • 2.4 滚动更新
  • 三、Kubernetes 对象


相信大家在前面的安装过程中,我们的k8s已经完成了一个超级具体的安装【是不是还是有点难度】,今天我们就在前面已经安装好的基础上来对我们K8s做一个基本操作的学习。

一、K8s介绍

Kubernetes(通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写)是一个以容器为中心的基础架构,可以实现在物理集群或虚拟机集群上调度和运行容器,提供容器自动部署、扩展和管理的开源平台。满足了应用程序在生产环境中的一些通用需求:应用实例副本、水平自动扩展、命名与发现、负载均衡、滚动升级、资源监控等。

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。

然后再来看看我们所需要了解到的专业术语

pod
pod可以理解为容器的外壳,它为容器做了一层抽象的封装,pod里面运行容器,pod的特点是可以将多个容器加入到同一个网络名称空间中。同一个pod可以共享储存卷。一个pod上无论是有一个容器还是有多个容器,一旦将此pod调度到某个node上运行时,这一个pod内的所有容器只能运行在同一个node上。

node
node是kubernetes集群中的工作节点,就是负责工作的。【我们在工作节点上join操作的那个】
node可以是任何形式的计算设备,能装k8s的集群代理程序,它都可以作为整个k8s集群一个成员。

标签选择器:
当大量的pod运行在一个集群中时,怎么批量进行管理呢?想只控制一部分的pod时又该如何?如何挑选和检测这些pod?有人会想到通过名称来识别容器,但是pod是随时删除和创建的,名称也会随着pod的删除和创建而发生改变。这样我们就给一类的pod进行分组,就是在创建pod时为其附上app的key的一个键值对,这样我们进行批量操作时可以通过检查pod中是否存在app的key,来实现对多个pod的控制,这样就会有一个新的问题了,怎么实现对多个标签的管理呢?这里我们就可以通过标签选择器组件来实现。标签选择器就是一种根据标签来过滤符合条件的资源对象的机制。

etcd 保存整个集群的状态;
apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡

核心组件

组件名称作用
etcd保存整个集群的状态
apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI)
kube-proxy负责为Service提供cluster内部的服务发现和负载均衡

在这里插入图片描述
参考
k8s官网
接下来就开始今天的学习吧

二、容器编排

首先去检查我们所有组件的状态,这里要保证我们所有状态为1才可以进行操作

kubectl get pod --all-namespaces -o wide

在这里插入图片描述

2.1 部署应用

查看可用节点《确保位于可用状态》

kubectl get nodes

在这里插入图片描述
创建带有部署名称和应用程序镜像位置的部署

kubectl create deployment kubernetes-bootcamp --image=gcr.lank8s.cn/google-samples/kubernetes-bootcamp:v1 --replicas=1

创建一个名为kubernetes-bootcamp 的 deployment,运行 kubernetes-bootcamp 镜像
kubectl create deployment:创建部署 
--image :指定镜像

查看刚刚的创建的部署

kubectl get deployments

在这里插入图片描述
去查看pods

kubectl get pods

在这里插入图片描述
在Kubernetes内部运行的Pod是在一个私人隔离网络上运行的,默认情况下,同一Kubernetes集群内的其他pod和服务都可以看到pod。我们可以通过

窗口A:kubectl proxy
窗口B:curl http://localhost:8001/version

来建立主机和Kubernetes集群之间的连接

在这里插入图片描述

2.2 了解应用

在上诉的实验中,我们创建了一个 Deployment ,k8s会添加一个Pod来对我们的应用进行管理。Deployment 具体的作用包括创建一个Pod副本集、控制Pod副本的版本、自动修复故障、提供回滚机制、调整 Pod 副本数量

同一个Pod下
共享存储
网络
容器信息

同一个pod下,可能会有多个容器,比如会有我们的jar和我们jar需要访问的数据库,在同一个节点处进行,彼此共享IP地址和主机。在Kubernetes中,不同的Pod被分配了不同的IP地址。这是因为每个Pod都被视为一个独立的实例,并且具有自己的网络标识符。当Kubernetes集群中的一个Pod创建时,它被分配了一个随机的IP地址,并且能够在整个Kubernetes集群范围内被唯一访问。每个Pod都会和他的工作节点绑定,直到终止, 如果工作节点发生故障,则会在集群中的其他可用工作节点上调度相同的 Pod。一个工作节点上存在多个pod。
在这里插入图片描述

当我们使用故障排查时可以通过如下命令执行

命令作用
kubectl get列出资源
kubectl describe显示有关资源的详细信息
kubectl logs打印 pod 和其中容器的日志
kubectl exec在 pod 中的容器上执行命令

在这里插入图片描述

2.3 公开暴露应用

Kubernetes Pod 是转瞬即逝的。 Pod 实际上拥有 生命周期,当我们的Node挂掉之后,pod也会消亡,这个时候ReplicaSet 会自动地通过创建新的 Pod 驱动集群回到目标状态,但是我们在上面已经知道每一个pod的ip地址都不一样,当我们pod丢失或重新创建,需要一种方法自动去调整我们IP地址的变更。Service 匹配一组 Pod 是使用 标签(Label)和选择器(Selector)。

type作用
ClusterIP (默认)在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问
NodePort使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用: 从集群外部访问 Service。是 ClusterIP 的超集
LoadBalancer在当前云中创建一个外部负载均衡器(如果支持的话),并为 Service 分配一个固定的外部IP。是 NodePort 的超集
ExternalName通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本

在这里插入图片描述

创建服务

kubectl get services
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
kubectl get services


#将 Deployment 对象 kubernetes-bootcamp 对应的 Pod 所提供的服务暴露出去,以便可以在 Kubernetes 集群外部访问该服务。
#将服务类型设置为 NodePort,这意味着服务将会绑定到每个节点的 IP 地址和随机端口上。这样,在集群外部可以使用任意一个节点的地址和端口来访问该服务。
#将服务的端口设置为 8080,这意味着在集群外部访问该服务时,需要使用 NodeIP:8080 的格式来指定访问的地址和端口。

访问

curl <node ip>:<port>

在这里插入图片描述

使用标签进行查看

kubectl describe deployment

在这里插入图片描述

kubectl get pods -l app=kubernetes-bootcamp
kubectl get services -l app=kubernetes-bootcamp

在这里插入图片描述

添加标签

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
#执行该命令后,可以使用 echo $POD_NAME 命令查看环境变量值,得到 Pod 的名称。这样,在后续操作中就可以直接使用 POD_NAME #环境变量来指定操作的 Pod,而不需要手动输入 Pod 的名称。

kubectl label pods $POD_NAME version=v1
#给指定pod添加标签

kubectl get pods -l version=v1

在这里插入图片描述

删除服务

kubectl get services
kubectl delete service -l app=kubernetes-bootcamp
kubectl get services
curl 172.20.10.4:30064 #可以看到已经连不上了
kubectl exec -ti $POD_NAME -- curl localhost:8080#我们只是关闭了外部端口,但是我们本机还是可以访问的

在这里插入图片描述

2.4 扩缩应用

在之前我们创建了一个 Deployment,然后通过 Service让其可以开放访问。Deployment 仅为跑这个应用程序创建了一个 Pod。当我们流量增加时,需要进行扩容来保证我们容器应用满足客户的需求。

在这里插入图片描述

扩展 Deployment 将创建新的 Pods,并将资源调度请求分配到有可用资源的节点上,收缩 会将 Pods 数量减少至所需的状态。Kubernetes 还支持 Pods 的自动缩放。将 Pods 数量收缩到0也是可以的,但这会终止 Deployment 上所有已经部署的 Pods,扩缩是通过改变 Deployment 中的副本数量来实现的,一旦有了多个应用实例,就可以没有宕机地滚动更新。

Deployment 扩张

kubectl get deployments
kubectl get rs
#当前 Kubernetes 集群中所有 ReplicaSet(缩写为 RS)的列表。ReplicaSet 是 Kubernetes 中的一种控制器,用于确保在任何时间都有一个指定数量的 Pod 副本在运行。

kubectl scale deployments/kubernetes-bootcamp --replicas=4
#更改副本数量
kubectl get deployments
kubectl get pods -o wide
kubectl describe deployments/kubernetes-bootcamp

在这里插入图片描述

打开端口

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
kubectl describe services/kubernetes-bootcamp

在这里插入图片描述

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
kubectl get nodes -o wide
curl 172.20.10.4:$NODE_PORT

在这里插入图片描述

Deployment 收缩

kubectl scale deployments/kubernetes-bootcamp --replicas=2
kubectl get deployments
kubectl get pods -o wide

在这里插入图片描述

2.4 滚动更新

用户希望应用程序始终可用,而开发人员则需要每天多次部署它们的新版本。在 Kubernetes 中,这些是通过滚动更新(Rolling Updates)完成的。 滚动更新 允许通过使用新的实例逐步更新 Pod 实例,零停机进行 Deployment 更新。新的 Pod 将在具有可用资源的节点上进行调度
在这里插入图片描述
滚动更新允许以下操作:
将应用程序从一个环境提升到另一个环境(通过容器镜像更新)
回滚到以前的版本
持续集成和持续交付应用程序,无需停机

kubectl get deployments
kubectl get pods
kubectl describe pods
#建立一个v2版本的
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
#之前的是curl 172.20.10.4:30064注意区分,而且版本是V1
curl 172.20.10.4:30417

在这里插入图片描述
更新

kubectl rollout status deployments/kubernetes-bootcamp
kubectl describe pods | grep image

版本回退

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.lank8s.cn/google-samples/kubernetes-bootcamp:v10
kubectl get deployments
kubectl get pods
kubectl describe pods

在这里插入图片描述


kubectl rollout undo deployments/kubernetes-bootcamp
kubectl get pods
kubectl describe pods | grep images

三、Kubernetes 对象

apiVersion
创建该对象所使用的 Kubernetes API 的版本
kind
想要创建的对象的类别

metadata
帮助唯一标识对象的一些数据
spec
你所期望的该对象的状态
Pod
最小的可部署单元,代表一个或多个主进程运行的容器实例
Service
为一组 Pod 提供稳定的网络访问端点,可以根据选择器匹配到特定的 Pod
Deployment
管理 ReplicaSet 的更新,使其从旧版本无缝地滚动升级到新版本,确保应用程序的高可用性和零停机时间
ReplicaSet
确保总有指定数量的 Pod 实例在运行中,如果遇到故障则自动替换
Secret
存储敏感数据(如密码、证书)的对象,与 ConfigMap 类似也可以在 Pod 中使用环境变量或卷的形式挂载到容器中
Namespace
虚拟集群的一种抽象,用于将资源隔离和分组,让不同的团队可以共享同一个 Kubernetes 环境

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消防安全知识答题活动小程序v4.3.0

消防安全知识答题活动小程序v4.3.0 v4.3.0 1&#xff09;实现答题倒计时功能 如果让你给一款答题小程序产品制定一个技术方案&#xff0c;比如实现答题倒计时功能&#xff0c;你会怎么做。 通常&#xff0c;我们对于倒计时的普遍认知是设置一个定时器去实现的&#xff0c;在…

0基础学习VR全景平台篇第32章:场景功能-嵌入文字

大家好&#xff0c;欢迎观看蛙色VR官方系列——后台使用课程&#xff01; 本期为大家带来蛙色VR平台&#xff0c;场景管理模块-嵌入功能文字模块&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四…

Android平台OpenCV入门

一、导入OpenCV 别忘记把libopencv_java3.so添加进来。 二、初始化 OpenCVLoader.initDebug();三、常用方法 1. CvType 数据类型 以CV_64FC2为例&#xff0c;64指64位&#xff0c;F指浮点数&#xff0c;C指通道&#xff0c;2为2通道。 数值具体类型取值范围CV_8U8 位无符…

5.30-cloud support -learning

文章目录 namespaceaccessNSG&#xff08;network security group &#xff09;UDR &#xff08;User-Defined Routing&#xff09;Azure Firewall namespace Namespaces are defined at the Kubernetes cluster level, so each namespace is unique throughout the cluster. I…

C语言笔记 | 数据结构入门指南

文章目录 0x00 前言 0x01 百鸡百钱 0x02 借书方案知多少 0x03 持续更新 0x04 参考文献 0x05 总结 0x00 前言 写这篇《C语言笔记 | 数据结构入门指南》主要是为了帮助更多的编程爱好者打开数据结构的大门&#xff0c;同时也是为了自我编程水平能力的提升。在深奥的数据结构…

正交实验进行方差分析

一、案例介绍 想要从某种草药中提取植物酚&#xff0c;利用专业知识发现可能有三个条件会影响植物酚的提取&#xff0c;每个条件有三个水平&#xff0c;想要通过实验&#xff0c;寻找植物酚的最佳提取条件&#xff0c;其中提取植物酚的参考标准为植物酚的含量&#xff08;案例…

在线原型设计是什么?8款在线原型工具助你高效设计!

原型设计是产品经理、设计师和开发工程师沟通最初的产品设想的重要工具。 在线原型通过云端的方式具象化地呈现产品内容、结构及粗略的布局&#xff0c;说明用户将如何与产品进行交互&#xff0c;搭建了产品经理、设计师和开发工程师沟通的桥梁&#xff0c;帮助产研团队减少信…

什么是深度数据包检测 (DPI)

随着混合工作成为生活的正常部分&#xff0c;新技术每天都在使用&#xff0c;同时总是通过网络传输数据的山体滑坡。通过高正常运行时间、快速解决问题和富有洞察力的情报提供无缝的用户体验至关重要。为此&#xff0c;对网络进行端到端监控非常重要。 深度数据包检测是一种用…

技术招聘漫谈 | 正在招Golang工程师的你,赶快收藏这份识人秘籍!

各位技术面试官&#xff0c;欢迎来到新一期的技术招聘漫谈专栏。 在前两期的专栏中&#xff0c;我们解析了前端工程师&#xff08;点击此处回顾&#xff09;以及 Java 工程师&#xff08;点击此处回顾&#xff09;这两个常见技术岗位的招聘技巧。 今天&#xff0c;我们想把目…

了解和使用 Docker 镜像仓库

前言 在上文 《了解和使用 Docker》 之后&#xff0c;反响不错&#xff0c;也上了热榜。本来是想直接整理一下容器编排工具 Docker Swarm 和 K8s 博文的&#xff0c;但是半路杀出了这个活动&#x1f602;&#xff0c;为表敬意&#xff0c;先参与一波吧。 本文主要介绍一下容…

【MyBatis】MyBatis中#{}与${}的区别是什么?

文章目录 前言一、彻底理解SQL注入二、关于 # { }三、关于$ { }四、Mybatis中#{}与${}的区别五、代码案例使用#{}案例使用$ {}案例 前言 在开发中使用Mybatis经常使用到#{}与${}&#xff0c;二者区别是&#xff1f;来总结一下。 在mybatis中动态 sql 是其主要特性之一&#x…

什么是现代化智慧型档案馆

近日&#xff0c;智慧档案馆建设的新闻热度不断攀升&#xff0c;你知道智慧档案馆是什么吗&#xff1f; ​智慧档案馆是指运用现代信息技术手段&#xff0c;对传统档案馆进行数字化转型&#xff0c;实现档案数字化存储、智能化检索和共享服务。通过数字化转型&#xff0c;不仅可…

< 免费体验ChatGPT:免费且好用,不用使用 “ 魔法 ”,一款功能强大且轻便的插件!webTab! >

免费且好用&#xff0c;不用使用 “ 魔法 ”&#xff0c;一款功能强大且轻便的插件&#xff01;webTab&#xff01; &#x1f449; 前言&#x1f449; 功能演示图&#x1f449; 使用经验分享&#x1f449; 如何安装webTab插件呢&#xff1f;往期内容 &#x1f4a8; tips&#x…

(转载)基于量子遗传算法的函数寻优算法(matlab实现)

8.1 理论基础 8.1.1 量子遗传算法概述 量子遗传算法(quantum genetic algorithm,QGA)是量子计算与遗传算法相结合的产物&#xff0c;是一种新发展起来的概率进化算法。遗传算法是处理复杂优化问题的一种方法&#xff0c;其基本思想是模拟生物进化的优胜劣汰规则与染色体的交…

太优雅了,公司项目终于用上了Spring状态机

1、什么是状态机 1.1 什么是状态 先来解释什么是“状态”&#xff08; State &#xff09;。现实事物是有不同状态的&#xff0c;例如一个自动门&#xff0c;就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机&#xff0c;也就是被描述的事物的状态的数量是有限…

【HTML 往日冒险 01】标签 元素 属性 注释 文本格式化 颜色 CSS

HTML 往日冒险日志01 说在前面重新开始基础标签 basic元素 elements属性 attributes标题&#xff0c;水平线以及注释 headings段落与折行 paragraphs样式 html_styles文本格式化 formatting注释 comments颜色 colorsCSS 说在前面 HTML 对于现在的我来说&#xff0c;熟悉又陌生…

实验室信息系统源码,LIS源码

实验室信息系统源码&#xff0c;LIS源码 技术细节&#xff1a; SaaS架构的Client/Server应用 体系结构&#xff1a;Client/Server架构 客户端&#xff1a;WPFWindows Forms 服务端&#xff1a;C# .Net 数据库&#xff1a;Oracle 接口技术&#xff1a;RESTful API HttpW…

深度学习环境搭建笔记(一):detectron2安装过程

文章目录 第一步 安装python第二步 安装pycocotools第三步 安装Torch和Torchvision第四步 安装fvcore第五步 安装detectron2第六步 开始安装 第一步 安装python cuda 10.2 环境下 conda create -n detectron python3.7 第二步 安装pycocotools 下载对应的pycocotools-window…

ESXI7.0安装Windows Server 2008 R2

1&#xff1a;使用VC正常建立虚拟机&#xff0c;前四项根据自己的时间情况选择&#xff0c;兼容性用默认的ESXI7.0U2及更高版本。 2&#xff1a;客户机操作系统选择Windows,客户机操作系统版本选择我们想安装的Windows Server 2008 R2(64位&#xff09; 3&#xff1a;自定义硬件…

LINUX使用问题记录

LINUX使用问题记录 linux 安装pylab报错 sudo apt-get install python3-matplotliblinux换源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bakvim 编辑 sources.list &#xff1a; $ sudo vim /etc/apt/sources.list 将 sources.list 中的内容替换如下 注意&#…