很多朋友在找k8s运维的时候会问什么是k8s运维,可见有人不';你对这个问题不太了解,是吗?那么什么是k8s运维呢?让';让我们仔细看看边肖的作品!什么是
k8s?
Kubernetes是一个可移植和可扩展的开源容器编排平台,用于管理容器化的工作负载和服务,并促进声明式配置和自动化。它有一个巨大且快速增长的生态系统。Kubernetes'服务,支持和工具随处可见。
为什么现在流行容器?
早期在物理服务器上部署应用存在资源分配的问题,因为无法定义应用在物理服务器上的资源边界,导致应用资源利用不足,无法扩展。
后来为了解决这个问题,引入了虚拟化技术。虚拟化技术是指让你在一台物理服务器的CPU上运行多个虚拟机,可以将多个应用与虚拟机隔离开来,具有一定的安全性。每个虚拟机都是一台完整的计算机,在虚拟化硬件上运行所有组件。
目前部署在物理服务器上的应用大多采用使用容器进行kubectl的方式。容器类似于虚拟机,它们都有自己的文件系统、CPU、内存、进程空间等。因为它们与基础设施分离,因此,它可以跨云和OS分布进行移植。基于这一特点,被企业广泛使用。
为什么我们需要使用k8s容器?
如果有这样的环境,如果一个容器在生产环境中出现故障,我们需要手动启动另一个容器,这对于我们的管理员来说很不方便。如果一个容器出现故障,另一个容器可以自动启动该容器来接管出现故障的容器,这是最好的。
k8s可以达到这种效果,Kubernetes提供了一个灵活运行分布式系统的框架。Kubernetes将满足您的扩展需求、故障转移、部署模式等。
k8s功能:服务发现和负载均衡、存储调度、自动部署和回滚、自动打包计算、自修复、密钥和配置管理
术语解释
secret
。Secret有三种类型:
服务账号:用于访问KubernetesAPI,由Kubernetes自动创建,自动挂载在Pod的目录下;
/run/secrets/kubernetes。io/服务帐户
不透明:base64编码格式的秘密,用来存储密码、密钥等;
kubernetes.io/dockerconfigjson:用于存储私有docker注册表的认证信息。
k8s
k8s由组件、API、对象等组成。
包含所有相关组件的Kubernetes集群图如下:
组件
控制平面组件
。kube-apiserver:作为k8s的api服务器,所有的KubernetesAPI都是暴露的,其他所有组件都必须通过其提供的API来操作资源数据。
确保集群状态访问的安全性
。隔离集群状态访问的模式与后端存储实现的模式:APIServer是一种状态访问的模式,不会因为后端存储技术etcd的改变而改变。
etcd:是k8s的键值数据库,是存储k8s所有集群数据的后台数据库。
kube-scheduler:收集并分析当前Kubernetes集群中所有节点节点的资源(内存、CPU)负载,然后据此将新创建的Pod分发到Kubernetes集群中的可用节点。。Kube-controller-manager:在主节点上运行控制器的组件。
cloud-controller-manager:云控制器manager是指嵌入了特定云的控制逻辑的控制平面组件
节点组件
。kubelet:在集群中的每个节点上运行的代理。它确保Pod中的所有容器都在运行。
kube-proxy:kube-proxy是运行在集群中每个节点上的网络代理,它维护节点上的网络规则。这些网络规则允许从群集内部或外部的网络会话与Pod进行网络通信。
容器运行时:负责运行容器的软件。
Addons
DNS:群集DNS是一个DNS服务器,可与环境中的其他DNS服务器协同工作。为Kubernetes服务提供DNS记录。
Web界面(Dashboard):Dashboard是Kubernetes集群的一个通用的、基于Web的用户界面。
容器资源监控:容器资源监控在集中式数据库中保存一些关于容器的常见时间序列度量,并提供浏览这些数据的界面。
集群级日志:集群级日志机制负责将容器的日志数据保存到一个集中的日志存储中,可以提供一个搜索和浏览的界面。
API
Kubernetes控制平面的核心是API服务器。API服务器负责提供HTTPAPI,供用户、集群的不同部分以及集群的外部组件相互通信。
对象
Kubernetes对象是Kubernetes系统中的持久实体。Kubernetes使用这些实体来表示集群的状态。
具体来说,他们可以描述:
容器化的应用程序正在运行(以及在哪些节点上运行)
这些应用程序可用的资源
关于这些应用程序如何运行的策略,例如重新制定策略、升级和容错
Kubernetes体系结构
Kubernetes架构由节点、控制平面到节点通信、控制器和云控制器管理器组成。
主流程图
Kubecfg将创建一个特定的请求,例如创建一个Pod。,发送给库伯内特斯客户端
库伯内特客户端请给我发一份传真伺服器
API服务器我喜欢艺术比如创建Pod的时候,存储类型是pods,然后据此选择哪个REST存储API来处理请求。
rest存储API处理。
处理结果存储在Etcd中,这是一个高可用的密钥存储系统。
API服务器响应Kubecfg'的要求,,调度程序将根据Kubernetes客户端获取集群中运行的Pod和Minion/Node的信息。
基于从Kubernetes客户端获得的信息。调度程序将未分发的pod分发到可用的Minion/Node节点。
节点
节点可以是虚拟机,也可以是物理机,具体取决于群集配置。。每个节点都包含运行pod所需的服务,这些服务由控制平面管理。
节点上的组件包括kubelet、容器运行时和kube-proxy。
节点状态
您可以使用kubectl查看节点状态和其他详细信息:
kubectl描述节点?节点名称
节点包含以下信息:
地址
主机名:由节点的内核设置。它可以被kubelet's-—主机名覆盖参数。
ExternalIP:通常,它是节点的外部可路由(可从群集外部访问)IP地址。
InternalIP:通常是只能在集群内路由的节点的IP地址。
状态(条件字段描述所有运行节点的状态)
就绪为真;如果节点是健康的并且准备好接收PodFalse表示节点不正常,无法接收Pod;未知意味着节点控制器在最近的节点监控宽限期(默认为40秒)内没有收到来自该节点的消息。
DiskPressure为真,表示节点的空闲空间不足以添加新的Pod否则为假
内存压力为真,表示节点有内存压力。,即节点可用内存低,否则为False
PIDPressure为True,表示节点上的进程太多;否则为假
如果网络不可用为真,则表示节点网络配置不正确;否则为False
容量和可分配描述节点上可用资源的上限:CPU、内存和可调度到节点的Pod。
信息关于节点的一般信息,例如内核版本、Kubernetes版本(kubelet和kube-proxy版本)、Docker版本(如果使用)和操作系统名称。。这些信息是由kubelet从节点收集的。
控制平面到节点通信
节点到控制平面
apiserver侦听安全HTTPS端口(443)
上的远程连接请求。向kudelet
控制平面到节点
API服务器到kudelet连接提供客户端凭证,以便
获取Pod日志
。挂钩(通过kubectl)到运行Pod
以提供kubelet的端口转发功能。
(注:连接状态下,默认apiserver不检查kubelet的服务证书。。易受中间人攻击,不安全。)
[XY001]从APIServer到节点、pod和服务的SSH隧道(现已废弃)
原因:如果没有服务证书,并且要求避免连接在不可信的网络或公共网络上,则可以在apiserver和kubelet之间使用ssh隧道。
Kubernetes支持使用SSH隧道来保护从控制平面到节点的通信路径。
konconnectivity服务是ssh隧道的替代方案,并且konconnectivity服务提供TCP层的代理,以支持从控制平面到集群的通信。
控制器
在Kubernetes中,控制器监控集群的常见状态,并致力于将当前状态转换为所需状态。
比如现在的室内温度是20度。我们调节遥控器使它上升到24度。20度到24度的变化,是让它从当前状态接近预期状态。
控制器模式可分为直接控制和通过API服务器控制。
云控制器管理器
云控制器管理器是指嵌入了特定云的控制逻辑的控制平面组件。。Cloudcontrollermanager允许您将聚合链接到云提供商的应用程序编程接口中,并分离与您的集群交互的组件。
云控制器管理器中的控制器包括
节点控制器
。当在云基础设施中创建新服务器时,节点控制器负责为新服务器创建节点对象。节点控制器从云提供商获得当前租户中的主机的信息。
执行功能:
通过云平台驱动的API为控制器发现的每个服务器初始化一个节点对象
用具体云平台
的信息对节点对象进行注释和标记,得到节点
的网络地址和主机名。检查节点的健康状态。
路由控制器路由控制器负责在云平台中正确配置路由,以便Kubernetes集群中不同节点上的容器可以相互通信。
服务控制器服务与受控负载平衡器、IP地址、网络包过滤和目标运行状况检查等云基础架构组件相集成。服务控制器与云驱动的API进行交互,以配置负载平衡器和其他基础架构组件。
Kubernetes安全
云原生安全
云原生安全有四个C's:云,集群,容器,代码
。云原生安全模型的每一层都基于下一个最外层,代码层受益于强大的基础安全层(云、集群、容器)。我们可以';不要通过解决代码层中的安全问题来保护基础层中较差的安全标准。
基础架构安全性
kubetnets基础设施关注
建议
通过网络访问API服务(控制平面)
对Kubernetes控制平面的所有访问都不允许在互联网上公开,应该由网络访问控制列表控制,该列表包含管理集群所需的IP地址集。
通过网络访问节点。
节点应配置为仅通过指定端口从控制平面接受节点端口和负载平衡器类型的连接(通过网络访问控制列表)和Kubernetes服务连接。。如果可能,这些节点不应该完全暴露在公共互联网上。Kubernetes云接入提供商的
API
每个云提供商需要对Kubernetes的控制平面和节点授予不同的权限集。。当提供云提供商对集群的访问时,最好遵循需要管理的资源的最低特权原则。Kops文档提供了上述文章的内容是IAM策略和角色的信息。
访问etcd
对ETCD(Kubernetes的数据存储)的访问应仅限于控制平面。根据配置的不同,您应该尝试通过TLS使用etcd。更多信息可在etcd文档中找到。
etcd加密
在所有可能的情况下,最好加密所有驱动器的静态数据,但是由于etcd拥有整个集群的状态(包括机密信息),所以它的磁盘应该用静态数据加密。
群集组件安全性
运行应用程序的安全问题
访问控制授权(对KubernetesAPI的访问)
身份验证方法
应用程序秘密管理(和etcd中静态数据的加密)
Pod安全策略
服务质量(和群集资源管理)
网络策略
KubernetesIngres的TLS支持
容器安全
容器安全问题
容器构建配置(不正确的配置、危险的装载、特权用户)
容器服务本身缺陷
Linux内核漏洞
映像签名和执行
代码安全
代码安全问题
只有通过TLS访问。
限制通信端口范围
第三方依赖安全
静态代码分析
动态检测攻击(黑盒)
Kubernetes架构常见问题
Kubernetes攻击矩阵
信息泄露
云账户AK泄露
API凭据(即阿里云AccessKey)是用户访问内部资源最重要的身份凭据。。当用户调用API时,通信加密和身份认证将使用API凭证。
API凭证是云上用户调用云服务API和访问云上资源的唯一身份凭证。
API证书相当于登录密码。,用于以编程方式调用云服务API。
K8s配置文件泄漏
kubeConfig文件的位置:
$home/。kube/config
。kubeconfig文件包含上述文章的详细信息,包括它们的位置和凭证。
云厂商会给用户提供这个文件,这样用户就可以通过kubectl来管理集群。如果攻击者能够访问该文件(例如办公室网络员工';机器入侵,代码泄露到Github等。).,可以直接通过API服务器接管K8s集群,这就带来了潜在的风险。
主节点SSH登录泄露[XY002][XY001]常见的容器集群管理方式是登录主节点或者操作跳板机。然后通过kubectl命令工具控制k8s。
云服务器通过ssh向主节点提供登录。
如果主节点的ssh连接地址泄露,攻击者可以炸开ssh登录,从而登录SSH,控制集群。
容器组件的未认证服务
Kubernetes架构下常见的开放服务指纹如下:
kube-API服务器:64438080
kubeCTL代理:80808081
kubelet:10250,10255,4149
仪表板:30000
dockerAPI:2375
etcd:2379,2380
kube-控制器-管理器:10252
kube-代理:10256,31442
kube-调度器:10251
weave:6781,6782,6783
kubeflow-dashboard:8080
注:前六个重点关注:一旦被控制,可以直接获得相应容器、相应节点、集群权限的服务
了解各个组件被攻击时的影响
组件划分图:
如果用户想在集群中创建新的容器组装单元,流程如下:
用户与kubectl交互,提出需求(例如KubeCTLcreate-fpod。Yaml)
。KoubekTerwillreadthe~/.kube/configurationandinteractwithapiserver.Protocol:http/https
.apiserver将与etcd、kube-controller-manager、scheduler和其他组件合作,准备新容器的配置并将其分发到节点。协议:http/https
。apiserver与kubelet交互,告知它创建容器的要求。协议:http/https;
kubelet与Docker等容器引擎交互,创建容器。,协议:http/unix套接字。
容器已在攻击APIServer的群集节点
上成功创建
APIserver简介:
在Kubernetes中,对于一对未经认证的apiserver,访问apiserver一般可以获得集群的权限。
在攻击者KubernetesAPIServer的眼中。
ContainerOrchestrationK8SMasterControlComponent
pod,Service,Secret,ServiceAccount,Binding,ComponentStatus,ConfigurationMapping,
Endpoint,Event,RestrictedScope,Namespace,Node,PersistentVolumeDeclaration,
Persistentvolume,podtemplate,replicationcontroller,resourcequota.
Alltheabovek8sresourcescanbecontrolled
可以获得几乎所有容器的交互外壳
具备一定技能可以获得所有容器主机的交互外壳
默认情况下,apiserver是经过认证的:
未经认证的配置如下:
。对于这种未经认证的设置,访问apiserver一般会获得集群的权限:
如何穿透apiserver,请参考
攻击kubelet
。每个节点都有一个kubelet服务,kubelet侦听端口10250、10248和10255。
端口10250是kubelet与apiserver通信的主要端口。通过这个端口,kubelet可以知道当前应该处理的任务。这个端口在最新版本的Kubernetes中是经过认证的,但是在接受匿名请求的情况下,没有身份验证信息的请求也可以使用10250提供的功能。在Kubernetes早期,很多挖矿木马都是通过这个端口传播的。
在配置文件中,如果进行以下配置,可能存在未经授权的访问漏洞。
/var/bin/kubulet/config/YAML
如果10250端口存在未授权访问漏洞,我们可以直接访问/pods检查
。根据pods中获得的信息,我们可以执行容器
中的命令。curl-Gks{命名空间}/{pod名称}/{容器名称}-d';input=1'-迪';输出=1';-迪';tty=1'-迪';command=whoami'
上面的命令获取websocket地址,命令结果是通过连接websocket得到的:
用wscat工具连接websocket
。wscat-c";{websocket}"no-check
可以获得我们命令执行的结果。
获取令牌
。/var/run/secrets/kubernetes。io/服务帐户
然后即可访问kube-api服务器,获取集群权限
curl-ks-H";授权:无记名ttps://master:6443/API/v1/namespaces/{namespaces}/secrets
"
ThegeneralstepsofattackingKublaiareasfollows:
Visitthepodtogetinformation
Getthenamespace,podsnameandcontainername
.(XY001)实施关于高级管理人员获取令牌/var/run/secrets/kubernetes.io/serviceaccount
使用令牌访问API服务器来操作pod。
攻击仪表板
[XY001]仪表板登录链接如下:仪表板界面如下:
dashboard是由Kubernetes官方推出的用于控制Kubernetes的图形界面。如果由于Kubernetes的不正确配置导致仪表板存在未授权访问漏洞,通过仪表板,我们可以控制整个集群。
默认情况下,仪表板需要经过身份验证。启用“启用-跳过-登录”时,用户可以在登录界面点击“跳过”按钮跳过登录,进入仪表板。
通过skip登录的dashboard默认没有操作集群的权限,因为Kubernetes使用RBAC(基于角色的访问控制)机制进行身份认证和权限管理。,不同的serviceaccount有不同的集群权限。
但是一些开发人员为了方便或者在测试环境中会将cluster-admin绑定到Kubernetes-dashboard(cluster-admin拥有管理集群的最高权限)。
Theclustermanagementsettingsforkubernetes-dashboardbindingareasfollows:
Newdashboard-admin.yamlcontent
API版本:rbac.authorization.k8s.io/v1kind:ClusterRoleBindingmetadata:name:kubernetes-dashboardroleRef:API组:RBAC。授权。k8s。io种类:集群角色名称:集群管理主题:种类:服务帐户名称:kubernetes-dashboard命名空间:kubernetes-仪表板
kubectlcreate-fdashboard-admin.yaml
andthenyouhavetherighttomanagetheclusterbyjumpingonthedashboard.
创建一个Pod控制节点,主要是将主机的根目录挂载到容器tmp目录。
新建一个Pod如下:
通过这个容器的tmp目录管理节点node的文件
。攻击etcd
Kubernetes默认使用etcdv3存储数据。如果na
etcd对可以暴露端口2379。,本地127.0.0.1无需认证即可访问。其他地址应使用—端点参数和证书进行身份验证。
非授权访问过程:
检查链接是否正常
etcdctlendpointhealth
readingserviceaccounttoken
etcdctlget/prefixkey-only|grep/secrets/kube-system/clusterrole
通过令牌访问API-服务器端口6443,并接管群集:
kubectl-unsecured-skip-TLS-verify-s-token=";[ey…]";-nkube-系统获取吊舱
攻击docker远程API
2375是远程控制docker的默认端口,通过该端口可以直接操作docker远程api(Docker守护进程。。默认情况下,Docker守护程序监听端口2375,并且未经身份验证。
当机器以某种方式启动daemon时,可以直接在外部机器中操作该机器的Docker守护进程:
。dockerdaemon-H=0.0.0.0:2375
anschlieendwirddurchgefhrtsystemctldaemon-reload,systemctlrestartdocker
当使用外部主机时,它可以在暴露端口2375的情况下操作主机。
-H
所以当你有了访问目标DockerAPI的网络能力或者主机能力,你就有了控制当前服务器的能力。。我们可以使用dockerapi在远程主机上创建一个特权容器,并将主机的根目录挂载到该容器。
检测目标中是否存在DockerAPI的未授权访问漏洞的方式也很简单。,访问http://[host]:[port]/infoDerWegenthlt容器运行,DockerRootDir等待关键词
攻击kubectl代理
二次开发产生的问题
管理Kubernetes无论是使用kubectl的UI功能,还是Kubernetesdashboard的UI功能,其实都是间接与APIServer进行交互。
如果有k8s二次开发的需求,大部分开发功能都请求了APIServer的RestAPI来实现功能。
例如,
给予用户摧毁自己的POD的能力。
删除
[XY001]类似于这样调用apiserver。如果攻击者修改了名称空间、pod和容器名称,就会越权。[XY002][XY001]推荐工具[XY002]Kube-Hunter扫描漏洞
kube-hunter是一个扫描器
,用于查找Kubernetes集群中的安全漏洞。下载地址:
CDK(推送)
。CDK是一个为容器环境定制的渗透测试工具,它在受损的容器中提供零依赖的通用命令和PoC/EXP。整合了Docker/K8s场景特有的逃生、横向移动和持久利用模式,以及插件管理。
下载地址:
参考链接
在一个应用的整个生命周期中,开发和运维都离不开它。一是塑造它,二是维护它。
如果应用程序需要部署在K8S中。开发和运维在里面做了什么?
从开发端来说,我们的应用应该具备以下能力:
健康检测接口用于检测应用的健康状态,在K8S中。就绪性和活性用于检测应用程序是否就绪。如果没有准备好或没有准备好,K8S将采取相应的措施来确保应用程序可用。
如果在我们的应用程序中没有定义相应的健康检测接口,K8S可以';无法判断应用是否正常可用,整个应用对我们来说就是一个黑匣子,所以我们可以';不要谈论应用程序的稳定性。
定义一个简单的健康检测接口如下:
我们如上定义健康接口。当应用程序启动时,您只需要探测这个接口。如果返回OK,说明应用正常。
当然,上面的界面很简单。在实际情况下,应用本身也可能依赖于应用,如redis、mysql、mq等。如果它们不正常,那么应用程序是否不正常?我们的应用程序健康检查需要检查其他应用程序的健康状态吗?
现在我们已经定义了健康检测接口,我们的YAML模板可以添加健康检测功能。,如下:
应用发布是常规操作,不能再常规了。通常采用滚动更新的方式上线,即先启动一个新的应用,再删除一个旧的应用。
如果此时旧应用有一些流量,会突然杀死旧应用的进程。,这部分流量不会得到正确处理,部分用户会受到影响。
怎么可能不受影响?
如果我们在停止应用前告知网关或注册中心,等待对方移除我们的应用后再注销。,这样就不会影响交通。
在K8S中,当我们要删除Pod时,Pod会变为终止状态,kubelet会看到Pod是否处于终止状态。,它将开始关闭Pod的过程,向Pod发送SIGTERM信号,在宽限期结束之前向Pod发送SIGKILL信号,并从端点移除Pod。从上面可以看出Pod会在停止前收到信号。如果应用程序本身没有能力处理这些信号,那么应用程序如何知道什么时候结束呢?
以下是SIG信号处理功能的简单定义。
当收到SIG信号时,,将调用Shutdown方法进行应用程序退出处理。
另外,结尾前的钩子要结合K8S的PreStop钩子来定义,如下:
如果使用注册表,比如nacos,,我们可以在PreStop钩子中告诉nacos先下线,如下:
Metrics主要用于暴露应用指标,指标可以根据实际情况定制。为了方便监测工具普罗米修斯收集和显示数据。
有些语言有现成的导出器,比如java的jmx_exporter。如果他们不';t,它们需要集成到自己的应用程序中。
例如:
这将暴露默认的Http指示器,可以通过curl127.0.0.1:9527/metrics获得。
如果需要自定义指标,按照规则定义即可,如下:
thus,theindicatorsofhttpserver_request_totalandhttpserver_request_duration_secondsaredefined.引用后,可以在/metrics中看到相应的数据。
定义指标,收集以下内容。它可以通过用户定义的收集规则或自动发现来收集。为方便起见,主要采用自动发现。
我们只需要在部署模板中定义注释,普罗米修斯就会自动添加采集目标,如下:
Trace用于跟踪。,每个请求都会生成一个TraceID,这个TraceID会伴随请求的整个生命周期,我们也可以根据这个ID查询请求的整个链接状态。
链接追踪,目前市面上有很多开源系统,比如Skywalking。、Jeager、Zipkin等。他们各有各的特点,如下。
推荐Jaeger,这是CNCF的毕业设计,成长空间兼容云原生系统架构。
然而我在这里使用天桥。
天行有很多现成的客户端,比如Java,Python等。可以直接用,而且都是会自动埋点的,但是对于围棋来说,只需要手动埋点就可以了。我们需要自己写代码。
例如,
定义了一个reporter向Skywalking报告数据,这是一个集成Trace的简单例子。
应用的可观察性主要来源于日志记录、监控和链路跟踪。标准日志记录有利于日志收集和故障排除。
原则上,无论什么类型的日志输出,什么格式的日志内容,都可以收集。而是为了方便和友谊。建议将日志输出到标准输出,这样更便于收集。
个人理解在K8s中,完全不需要将日志输出到文件中,也没有';不要浪费它们,因为所有的日志都会被收集到日志系统中。并且输出到文件的日志会随着应用的发布而丢失,那么输出到文件的意义是什么呢?
开发系统开发完成后,将交付运维部署。为了保证应用的稳定性,运维在部署应用时要考虑以下几点。
K8S可以与有状态应用程序或无状态应用程序一起部署。对于有状态应用,我很少在K8S中部署,大部分都是无状态应用。至于为什么,用多了就知道了。用于商业应用的
强烈建议让它保持无状态,即使有些东西需要持久化,也应该保存到数据库、对象存储或其他单独的文件系统,而不是挂载到应用程序Pod上。
这样做的好处是应用程序和数据是分离的。应用程序可以随意启动、停止、扩展和迁移。
保持高可用性应该是每个运维人员的使命。K8S中的
应该如何配置?(1)应用程序Pod应该是多个副本
(2)应用程序pod之间的反关联性,以防止相同的应用程序被调度到相同的主机,如下所示。
(3)为了避免应用因为节点维护等原因驱逐pod,将所有pod驱逐。,专门配置了PodDisruptionBudget,以确保至少有一个应用程序可用,如下所示。
(4)如果某个节点因为某些原因需要驱逐一些PODs,为了避免重要应用的驱逐,应该为应用配置更高的QoS。,如下:
所谓优雅的在线能力,就是保证应用能够提供服务,然后接入外部流量,在完全启动之前不能提供服务。
在K8S中,应用程序在启动后会被添加到端点。,然后通过服务访问流量。什么情况下创业成功?主要通过K8SReadinessProbe检测。这时候开发的健康检测界面就派上用场了,如下:
所以我们应该将上述配置添加到K8S的YAML文件中。
所谓异常自愈,是指应用本身崩溃或者应用Pod所在的节点异常,应用可以自动重启或者迁移。。此时需要用K8SLivenessProbe测试,如下。
K8S的YAML列表添加上述配置时,会定期检测应用程序是否正常,如果不正常,会触发重启动作。。如果节点异常,K8S会重新调度Pod。
应用程序通过HTTPS进行访问是很常见的。企业应用建议购买相应的SSL证书,然后进行配置。例如
。
以上描述了开发和运维对于线上应用要做的工作,不完整但足够。
不同的企业有不同的尿液特征,但作为运维部门,要牢记稳定永远是第一尿液特征。通过以上梳理我们的申请模板排列如下:
如果我的文章对你有帮助,请帮助我。你的支持将激励我输出更高质量的文章。非常感谢!
您也可以将我的微信官方账号设置为"star"。这样,当微信官方账号';的文章更新了,您会尽快收到推送消息,以免错过我的文章更新。
本文将介绍k8s中的一些基本命令,辅以解释一些基本概念以方便理解,即,这篇文章实用性大于学术性。如果想提前了解k8s,可以通过以下链接了解:
k8s是一个经典的一对多模型。有一个主管理节点master和许多工作节点slaver。当然k8s也可以配置多个管理节点,拥有两个以上的管理节点称为高可用。K8s包括很多组件。每个组件运行在docker容器中,然后通过自己规划的虚拟网络相互访问。您可以通过kubectlgetpod-nkube-system查看所有节点上的组件容器。
管理节点运行的k8s组件会比工作节点多,我们依靠这些多余的组件给工作节点下命令。他们叫什么名字?我赢了';这里不赘述。反正这些名字对"基本用途"。
要想了解一件事,首先要了解它的内在概念。通俗点就是,k8s做了什么?为了提供更可靠的服务,需要增加服务器的数量,缩小每台服务器的规模来分担负载,越来越多的虚拟机会带来越来越高的运维成本。。少量的运维人员如何管理大量的服务器及其服务?k8s就是干这个的。
k8s将大量服务器重新抽象为一个统一的资源池。对于操作和维护人员来说,他们不';前面没有服务器1和服务器2的概念,而是一个统一的资源池。添加新服务器只会增加操作和维护人员可用的资源池数量。而且k8s把一切可以利用的东西抽象成资源的概念,从而提供了一个更加统一的集合。,更简洁的管理方法。
接下来,我将把每个基本命令作为一节来介绍,并辅以一些基本概念。本文介绍的命令涵盖四个方面:添加、删除、更改和搜索。下表篇幅较长,可以参与。让';s把create之后不太常用的命令放在下一篇文章k8s基本用法(第二部分):
Let';让我们言归正传。首先,让';s了解一下k8s中最常用的命令,kubectlget。记住,k8s把所有东西抽象成资源,kubectlget用来查看这些资源。最常见的资源是pod。
我们不仅将自己的服务打包为pod。就连k8s都是靠一堆豆荚跑的。让';让我们看看k8s的pod:
-n参数指定要查看哪个名称空间。。K8s所有pod都放在kube-system名称空间中。
执行kubectlgetpod-nkube-system命令后,可以看到以下内容:
每一行都是一个资源,我们这里看到的资源就是pod。你看到的pod数量可能和我的不一样,因为这个列表包含了k8s在所有节点上运行的pod,加入的节点越多。,则显示的窗格越多。让';s一栏一栏看:
kubectlget可以列出k8s中的所有资源
本文只介绍如何用kubectl获取pod的列表。。但是唐';不要将get和pod绑定在一起。pod只是k8s中的一个服务。你不仅可以得到豆荚。,还可以得到svc(视图服务)、getrs(视图副本控制器)、getdeploy(视图部署)等等,虽然kubectlgetpod是最常用的一种。但是,如果你想查看一个资源,不';不知道命令是什么,kbuectl获取资源名称是正确的。
如果您想查看更多信息,您可以指定-owide参数,如下所示:
添加该参数后,可以看到资源的ip和节点。
记得加-n
-n,可以说是kubectlget命令最常用的参数。在正式使用中,我们永远不会在默认命名空间中发布资源。因此,永远不要忘记在get命令后添加-n。
kubectlget命令可以列出k8s中的资源。而kubectlgetpod是一个非常常见的查看pod的命令。-n参数可以指定pod所在的名称空间。
kubectldescribe命令可用于查看资源的具体信息。他还可以查看所有资源的详细信息,但最常见的是查看pod的详细信息。。他还可以使用-n参数来指定资源所在的名称空间。
例如,我们可以使用下面的命令来查看刚才pod列表中的一个pod。注意不要忘记将pod的名称改为我们自己的名称:
然后就可以看到很多信息了。让';让我们分开来谈。首先,你可以在详细信息的开头找到:
基本属性
有些是常用的。,如节点、标签和控制者。通过Node可以快速定位pod所在的机器,从而检查机器是否有问题或者停机。。通过标签,您可以检索pod的一般用途和定位。并且通过ControlledBy,可以知道哪个k8s资源创建了pod。然后可以使用kubectlget资源名继续查找问题。比如上面的守护进程set/kube-法兰绒-ds-amd64。,可以通过kubectlgetdaemonset-nkube-system获取上一节的资源信息。
内部图像信息
在中间部分,您可以找到如下所示的容器段落。这一段详细描述了pod中每个docker容器的信息,比如图像字段。当pod中出现ImagePullBackOff错误时,您可以检查该字段以确认提取了什么图像。其他字段名很通俗,可以直接翻译。
事件
你看describe里的细节,最常用的信息获取地点就是这个事件段落。你可以在介绍的最后找到,如下:
可以,如果你看到上面并且没有事件的话。,表示吊舱一切正常。当pod的状态是不运行的时候,这里一定或多或少的存在问题,看起来是这样的,然后你可以通过里面的信息来分析pod问题的详细原因:
kubectldescriberesourcenameinstancename查看资源的详细信息。,最常用的还是如kubectl描述pod的podname-n命名空间来获取一个pod的基本信息。如果有问题,您可以在所获得信息的末尾看到事件段落。,它记录了pod故障的原因。
如果想查看某个pod的具体日志,可以通过kubectllogspod的名称来查看。注意,这只能查看pod的日志。。您可以通过添加-f参数来连续查看日志。例如,查看kube-system名称空间中一个法兰绒pod的日志,注意该pod的名称被修改:
,然后您可以看到下面的输出:
。如果发现某个pod的服务有问题,但状态仍然显示正在运行,可以使用kubectllogs查看其详细日志。在本文中,我们知道k8s的用途和一些基本概念,知道最常用的get、descibe和logs命令。知道了这三个命令之后,我们就可以从k8s中获取几乎所有的常用信息了。。在下面k8s的基本使用(第二部分)中,我们将进一步了解如何在k8s中创建、修改和删除资源。
(1)服务发现和调度
(2)负载平衡
(3)服务的自愈
(4)服务的灵活扩展
(5)横向扩展
(6)存储卷的挂载
总之。K8s可以让我们应用的部署和运维更加方便。要了解更多,推荐你去看看极速云,这是一家提供云原生应用和数据平台产品的全栈云原生技术服务商。,涵盖了容器云PaaS、DevOps、微服务治理、服务网格、API网关等等。可以体验一下。
希望能帮到你,可以给你大大的赞。
Kubernetes(k8s)是Google的开源容器集群管理系统(insideGoogle:Borg),主要用于?集装箱排列?启动容器,自动部署,扩展和管理容器应用程序和回收容器。。k8s的目标是让容器化应用的部署变得简单高效。k8s提供了应用程序部署、规划、更新和维护的机制。
使用kubernetes管理Docker集群Docker可以看作是Kubernetes内部使用的底层组件;此外,kubernetes不仅支持Docker,还支持Rocket,这是另一种容器技术。
扩展数据:
从背景来看,Kubernetes是一个开源"集装箱布置"由Google和RedHat共同领导的项目,起源于Google的Borg系统。
因此其在超大规模集群管理方面的经验明显优于其他容器编排技术,而Kubernetes在社区管理方面的民主化使其迅速击败了Docker公司推出的容器编排解决方案(ComposeSwarm)。,从而成为集装箱排列领域事实上的标准。
功能上,Kubernetes是一个构建基于容器的分布式系统的综合基础设施环境,不仅可以实现基本的用户镜像和运行容器。还能提供路由网关、横向扩展、监控、备份、容灾等一系列运维能力。
感谢您阅读本篇对k8s运维的详细介绍如果你不';对k8s运维不够了解,想了解更多的k8s运维,可以在本站首页搜索你想了解的!