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

命令行优化、Pod介绍、label标签、控制器(Deployment、DaemonSet)

文章目录

  • 一、优化命令行
  • 二、kubernetes带来的变革
    • 1.对于开发人员
    • 2.对于运维人员
    • 3.Pod
      • 1>Pod生命周期
      • 2>Pod是如何管理多个容器的
      • 3>Pod中数据持久性
      • 4>Pod的状态
      • 5>Pod的资源清单详解
    • 6>Pod的重启策略
  • 三、名词介绍
    • 1.k8s中的名称空间
    • 2.namespace
    • 3、Label标签
    • 3.k8s中常用命令
    • 4.控制器
      • 1)deployment(部署长期运行、无状态应用)
      • 1>弹性扩容的3种方法
      • 2>更新(首先要存在低版本才可以更新)
      • 3>回滚
    • 2)DaemonSet(一般用来监控、收集日志)

一、优化命令行

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

二、kubernetes带来的变革

k8s与docker的关系:
k8s是一个容器化管理平台,docker是容器

1.对于开发人员

由于公司业务多,开发环境、测试环境、预生产环境和生产环境都是隔离的,而且除了生产环境,为了节省成本,其他环境可能是没有日志收集的,在没有用 k8s 的时候,查看线下测试的日志,需要开发或者测试人员,找到对应的机器,在找到对应的容器,然后才能查看日志,在用了k8s之后,开发和测试可以直接在k8s 的dashboard 到对应的 namespace,即可定位到业务的容器,然后可以直接通过控制台查看到对应的日志,大大降低了操作时间
目前我们使用 jenkins、gitrunner 进行发版或者回滚等,从开发环境到测试环境,到生产环境,完全遵守一次构建,多集群、多环境部署,通过不同的启动参数、不同的环境变量、不同的配置文件实现区分不同的环境。目前已经实现 Python、Java、PHP、NodeJS、Go、.NET Core、Python等多种语言的一键式发版、一键式回滚,大大提高了开发人员的开发效率。

2.对于运维人员

如果你是一名运维人员,可能经常因为一些重复、繁琐的工作感觉厌倦。比如:这个需要一套新的测试环境,那个需要一套新的测试环境,之前可能需要装系统、装依赖环境、开通权限等等。而如今,可以直接用镜像直接部署一套新的测试环境,甚至全程无需自己干预,开发人员通过 jenkins 或者自动化运维平台即可一键式创建,大大降低了运维成本。
一开始,公司业务故障,可能是因为基础环境不一致、依赖不一致、端口冲突等等问题,现在实现 Docker镜像部署,k8s 编排,所有的依赖、基础都是一样的,并且环境的自动化扩容、健康检查、容灾、恢复都是全自动的,大大减少了因为这类基础问题引发的故障。也有可能公司业务是由于服务器宕机、网络等问题,造成服务不可用,此类情况均需要运维人员及时去修复,而如今,可能在你收到告警信息的时候,k8s 已经帮你恢复了。
在没有使用 k8s 时,业务应用的扩容和缩容,都需要人工去处理,从采购服务器、上架、到部署依赖环境,不仅需要大量的人力物力,而且非常容易在中间过程出现问题,又要花费大量的时间去查找问题。成功上架后,还需要在前端反代端添加或该服务器,而如今,可以利用 k8s 的弹性计算,一键式进行扩容和缩容,不仅大大提高了运维效率,而且还节省了不少的服务器资源,提高了资源利用率。

- 对于`反代配置方面`,比如可能你并不会,或者对 nginx 的配置规则并不熟悉,一些高级的功能你也不会实现,而如今,利用 k8s 的 ingress 即可简单的实现那些复杂的逻辑。并且也不会在遇到 nginx 少加一个斜杠和多加一个斜杠的问题。
- 对于`负载均衡方面`,之前负载均衡可能是 Nginx、LVS、HAProxy、F5 等,云上可能是云服务商提供的不在均衡机制。每次添加删除节点时,都需要手动去配置前端负载均衡,手动去匹配后端节点,而如今,使用 k8s内部的 service 可以动态发现实现自动管理节点,并且支持自动扩容缩容。之前遇到高峰流量时,经常服务器性能不够,需要临时加服务器面对高峰流量,而如今对于高性能 k8s 集群加上 serverless,基本实现无需管理,自动扩容。
- 对于`高可用方面`,k8s 天生的高可用功能,彻底释放了双手,无需再去创建各类高可用工具、检测检查脚本。k8s 支持进程接口级别的健康检查,如发现接口超时或者返回值不正确,会自动处理该问题。
- 对于`中间件搭建方面`,根据定义好的资源文件,可以实现秒级搭建各类中间件高可用集群,并且支持一键式扩缩容,如 Redis、RabbitMQ、Zookeeper 等,并且大大减少了出错的概率。
- 对于`应用端口方面`,传统行业中,一个服务器可能跑了很多进程,每个进程都有一个端口,需要人为的去配置端口,并且还需要考虑端口冲突的问题,如果有防火墙的话,还需要配置防火墙,在 k8s 中,端口统一管理统一配置,每个应用的端口都可设置成一样的,之后通过 service 进行负载均衡,大大降低了端口管理的复杂度和端口冲突。

3.Pod

1、k8s集群中部署的最小单元。Pod最主要的功能管理是将一个业务或者一个调用链的所有服务(容器)
2、pod是k8s中最小部署单元,用来管理一个调用链的容器,它之中的主容器(pause)为整个调用链的容器提供基础网络,共享存储,监控业务容器的运行状态。
在这里插入图片描述
比如:你运行一个操作系统发行版的软件仓库,一个nginx容器用来发布软件,另一个容器专门用来从源仓库做同步,这两个容器的镜像不太可能是一个团队开发的,但是他们一块工作才能提供一个微服务,这种情况下,不同的团队各自开发构建自己的容器镜像,在部署的时候组合成一个微服务对外提供服务。这就是k8s中的Pod。

目前k8s中业务主要可以分为长期伺服型(long-running)批处理型(batch)节点后台支撑型(node-daemon)有状态应用型(stateful application);分别对应的小机器人控制器Deployment、Job、DaemonSet 和 StatefulSet。

# 1、Pod
1、最小部署单元
2、一组容器的集合
3、共享网络
4、共享存储
5、生命周期是短暂的
6、只要有pod,这个容器就要被启动
7、在同一个pod里,容器的端口不能冲突

1>Pod生命周期

在这里插入图片描述

#pod的生命周期
1.创建pod
2.创建主容器
3.依次创建业务容器
4.执行启动回调钩子
5.进行探测
6.执行结束回调钩子
7.终止容器

存活性探测:检测容器是否存活
就绪性探测:检测容器是否对外提供服务

2>Pod是如何管理多个容器的

Pod中可以同时运行多个进程(作为容器运行)协同工作。。同一个 Pod 中的容器会自动的分配到同一个 node上。同一个Pod 中的容器共享资源、网络环境和依赖,所以它们总是被同时调度。在一个 Pod中同时运行多个容器是一种比较高级的用法。只有当你的容器需要紧密配合协作的时候才考虑用这种模式。

3>Pod中数据持久性

Pod在设计⽀持就不是作为持久化实体的。在调度失败、节点故障、缺少资源或者节点维护的状态下都会死
掉会被驱逐。通常,我们是需要借助类似于Docker存储卷这样的资源来做 Pod 的数据持久

4>Pod的状态

  • 挂起(Pending):API Server 创建了 pod 资源对象已存入 etcd 中,但它尚未被调度完成,或者仍处于从仓库下载镜像的过程中。
  • 运行中(Running):Pod 已经被调度至某节点,并且所有容器都已经被 kubelet 创建完成
  • 成功(Succeeded\compland):Pod 中的所有容器都已经成功终止并且不会被重启。
  • 失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。即容器以非 0 状态退出或者被系统禁止。
  • 未知(Unknown):Api Server 无法正常获取到 Pod 对象的状态信息,通常是由于无法与所在工作节点的kubelet 通信所致。
  • ImgPullErr : 镜像拉取失败
  • ContainerCreating : 容器创建中

5>Pod的资源清单详解

apiVersion:v1  #必选,API的版本号
kind:Pod   #必选,类型Pod
metadata: # 必选,元数据name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称namespace: web-testing # 可选,不指定默认为 default,Pod 所在的命名空间labels: # 可选,标签选择器,一般用于 Selector- app: nginxannotations: # 可选,注释列表- app: nginx
spec: # 必选,用于定义容器的详细信息containers: # 必选,容器列表- name: nginx # 必选,符合 RFC 1035 规范的容器名称image: nginx:v1 # 必选,容器所用的镜像的地址imagePullPolicy: Always # 可选,镜像拉取策略workingDir: /usr/share/nginx/html # 可选,容器的工作目录volumeMounts: # 可选,存储卷配置- name: webroot # 存储卷名称mountPath: /usr/share/nginx/html # 挂载目录readOnly: true # 只读ports: # 可选,容器需要暴露的端口号列表- name: http # 端口名称containerPort: 80 # 端口号protocol: TCP # 端口协议,默认 TCPenv: # 可选,环境变量配置- name: TZ # 变量名value: Asia/Shanghai- name: LANGvalue: en_US.utf8resources: # 可选,资源限制和资源请求限制limits: # 最大限制设置cpu: 1000mmemory: 1024MiBrequests: # 启动所需的资源cpu: 100mmemory: 512MiBreadinessProbe: # 可选,容器状态检查httpGet: # 检测方式path: / # 检查路径port: 80 # 监控端口timeoutSeconds: 2 # 超时时间initialDelaySeconds: 60 # 初始化时间livenessProbe: # 可选,监控状态检查exec: # 检测方式command:- cat- /healthhttpGet: # 检测方式path: /_healthport: 8080httpHeaders:- name: end-uservalue: jasontcpSocket: # 检测方式port: 80initialDelaySeconds: 60 # 初始化时间timeoutSeconds: 2 # 超时时间periodSeconds: 5 # 检测间隔successThreshold: 2 # 检查成功为 2 次表示就绪failureThreshold: 1 # 检测失败 1 次表示未就绪securityContext: # 可选,限制容器不可信的行为provoleged: falserestartPolicy: Always # 可选,默认为 AlwaysnodeSelector: # 可选,指定 Node 节点region: subnet7imagePullSecrets: # 可选,拉取镜像使用的 secret- name: default-dockercfg-86258hostNetwork: false # 可选,是否为主机模式,如是,会占用主机端口volumes: # 共享存储卷列表- name: webroot # 名称,与上述对应emptyDir: {} # 共享卷类型,空hostPath: # 共享卷类型,本机目录path: /etc/hostssecret: # 共享卷类型,secret 模式,一般用于密码secretName: default-token-tf2jp # 名称defaultMode: 420 # 权限configMap: # 一般用于配置文件name: nginx-confdefaultMode: 420
pod初体验:# k8s配置清单apiVersion
kind 
metadata
spec
status    # 部署状态(不可更改)apiVersion :指定k8s部署的api版本号
kind : 指定资源类型(pod)
metadata : 记录部署应用的基础信息
spec : 指定部署详情string : 跟字符串
Object :
[]Object : - name#实例1:部署nginx、tomcat容器
# kubectl explain Pod  #查apiVersion版本号 v1
apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: nginximage: nginx- name: tomcatimage: tomcat# k8s部署一个yaml的应用:kubectl apply -f [配置清单]ImgPullErr : 镜像拉取失败
ContainerCreating : 容器创建中注意:监控启动容器
[root@k8s-master-01 ~]# kubectl get pods -o wide -w查看容器启动的详情
[root@k8s-master-01 ~]# kubectl describe pod test-7566b76cfc-vmtf9进入容器
kubectl exec -it test-7566b76cfc-vmtf9 -- bash指定进入容器
kubectl exec -it test-7566b76cfc-vmtf9  -c tomcat-- bash查看pod的版本号
kubectl explain pod查看pod后面跟的spec字段
kubectl explain pod.spec

6>Pod的重启策略

Pod 重启策略( RestartPolicy )应用于 Pod 内的所有容器,井且仅在 Pod 所处的 Node 上由 kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时, kubelet 将根据 RestartPolicy 设置来进行相应的操作。
Pod 的重启策略包括:Always、OnFailure 和 Never,默认值为 Always

Always:当容器失效时,由 kubelet 自动重启该容器。
OnFailure:当容器终止运行且退出码不为 0 时,由 kubelet 自动重启该容器
Never:不论容器运行状态如何,kubelet 都不会重启该容器。
kubelet 重启失效容器的时间间隔以 sync-frequency 乘以 2n 来计算;例如 1、2、4、8 倍等,最长延时5min ,并且在成功重启后的 10 min 后重置该时间。
Pod 的重启策略与控制方式息息相关,当前可用于管理 Pod 的控制器包括 ReplicationController、Job、DaemonSet 及直接通过 kubelet 管理(静态 Pod)。每种控制器对 Pod 的重启策略要求如下:
注意:
管理pod的资源叫做控制器

1.RC 和 DaemonSet:必须设置为 Always,需要保证该容器持续运行。
2.Job 和 CronJob:OnFailure 或 Never,确保容器执行完成后不再重启。
3.kubelet:在 Pod 失效时自动重启它,不论将 RestartPolicy 设置为什么值,也不会对 Pod 进行健康检查。

查看RC的设置语法
[root@k8s-master-01 ~]# kubectl explain pod.spec.restartPolicy
KIND:     Pod
VERSION:  v1FIELD:    restartPolicy <string>DESCRIPTION:Restart policy for all containers within the pod. One of Always, OnFailure,Never. Default to Always. More info:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy

三、名词介绍

1.k8s中的名称空间

k8s中名称空间是用来`隔离集群资源`,而k8s中的资源也分为`名称空间级资源以及集群级资源`
mysql   客户端    kubectl
mysqld  服务端    kubernetes# kubectl是k8s客户端,它跟k8s没有任何关系。# kubectl get [资源名称] 获取集群资源的命令[root@k8s-master-01 ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   5d3h
kube-node-lease   Active   5d3h
kube-public       Active   5d3h
kube-system       Active   5d3h
[root@k8s-master-01 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   5d3h
kube-node-lease   Active   5d3h
kube-public       Active   5d3h
kube-system       Active   5d3h# 注:部署应用一般是部署在自己的名称空间之内
#k8s中的命名规范
1、必须小写
2、必须以字母开头
3、名称当中只能够包含字母、数字和中划线(-)#创建命名空间
[root@k8s-master-01 ~]# kubectl create namespace jyh
namespace/jyh created
[root@k8s-master-01 ~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   5d4h
jyh               Active   7s
kube-node-lease   Active   5d4h
kube-public       Active   5d4h
kube-system       Active   5d4h

2.namespace

namespace是命名空间,用来做集群资源隔离的(业内默认的标准,一个微服务一个namespace)
k8s集群中:
1、集群级资源:所有命名空间都能够使用
2、命名空间级资源:只能在同一个命名空间内使用

3、Label标签

标签可以称之为资源的标示,一般用于发现资源

一个Label是一个key=value的键值对,其中key与value由用户自己指定。Label可以附加到各种资源对象上,例如Node、Pod、Service、RC 等,一个资源对象可以定义任意数量的 Label,同一个 Label也可以被添加到任意数量的资源对象上去,Label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。


`版本标签`:“release” : “stable” , “release” : “canary”
`环境标签`:“environment” : “dev” , “environment” : “production”
`架构标签`:“tier” : “frontend” , “tier” : “backend” , “tier” : “middleware”
`分区标签`:“partition” : “customerA” , “partition” : “customerB”
`质量管控标签`:“track” : “daily” , “track” : “weekly”
# docker中的TAG = 仓库URL/名称空间/仓库名称:版本号k8s当做`方便与管理和监控拥有同一标签的所有容器 ` #标签是指pod,但是pod是管理容器的
[root@k8s-master-01 ~]# vim tag.yaml 
apiVersion: v1
kind: Pod
metadata:name: test-taglabels:release: stable
spec:containers:- name: nginximage: nginx# 1、查看label
[root@k8s-master-01 ~]#   
NAME       READY   STATUS    RESTARTS   AGE   LABELS
test-tag   1/1     Running   0          67s   release=stable# 2、增加标签
kubectl label pod(资源类型) test-tag app=tag[root@k8s-master-01 ~]# kubectl label pod test-tag app=tag
pod/test-tag labeled
[root@k8s-master-01 ~]# kubectl get pod --show-labels 
NAME                     READY   STATUS             RESTARTS   AGE     LABELS
test-tag                 0/1     ImagePullBackOff   0          2m15s   app=tag,release=stable# 3、删除标签
[root@k8s-master-01 ~]# kubectl label pod test-tag app-
pod/test-tag labeled
# 4、查看标签
[root@k8s-master-01 ~]# kubectl get pod --show-labels 
NAME       READY   STATUS    RESTARTS   AGE     LABELS
test-tag   1/1     Running   0          7m53s   release=stable#  5、修改标签
## 先删除后增加
kubectl label pod test-tag app=tag release-
kubectl label pod test-tag app=tag release=bate# 6、版本
stable 稳定版本 
beta  公测版本
alpha 内测版本=================================================================================
# 查看资源标签标签
kubectl get deployment --show-labels# 创建标签
kubectl label [资源类型] [资源名] [key=value]# 删除标签
kubectl label [资源类型] [资源名]  key-

3.k8s中常用命令

#1.获取资源
kubectl get [资源名称][root@k8s-master1 ~]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
test   1/1     Running   1          6d#2.创建资源
kubectl apply [资源类型] [资源名称]
kubectl apply -f [资源清单的路径][root@k8s-master1 ~]# vim tag.yaml
[root@k8s-master1 ~]# kubectl apply -f tag.yaml 

4.控制器

k8s中控制器分为:deployment、DaemonSet、Statufluset
控制器是用来管理Pod

1)deployment(部署长期运行、无状态应用)

deployment:在deployment对象中描述所需状态,然后deployment控制器将实际状态以受控的速率更改为所需的状态(自愈)

#1.deployment:在deployment对象中描述所需状态,然后deployment控制器将实际状态以受控的速率更改为所需的状态(自愈)
一般用来部署长期运行的,无状态的应用(对启动顺序没有要求的(php nginx))
总结:主要功能是保证有足够的Pod正常对外提供服务
特点:集群之中,随机部署#2.创建deployment.yaml
[root@k8s-master1 ~]# vim deployment.yaml
apiVersion: apps/v1  #kubectl explain deployment查看deployment版本号:apps/v1
kind: Deployment  #类型
metadata:  #元数据(基本信息)name: deployment  #deployment的名称
spec:  #定义容器的详细信息replicas: 1  #创建Pod的副本数selector:  #标签选择器:定义Deployment 如何找到要管理的 Pod,与 template 的 label(标签)对应matchLabels: #精确匹配release: stable  #对应Pod标签template:  #创建Pod的模板---------以下是Pod信息metadata:  #Pod元数据name: test-tag  #Pod名称(可不定义,随机生成)labels:  #标签release: stable spec:  #定义容器详细信息containers:  #容器列表- name: nginximage: nginx#3.创建deployment
[root@k8s-master1 ~]# kubectl apply -f deployment.yaml 
deployment.apps/deployment created[root@k8s-master1 ~]# kubectl get deployments.apps   #查看deployment
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
deployment   1/1     1            1           51s#4.查看部署详情
[root@k8s-master1 ~]# kubectl describe deployments.apps 
Name:                   deployment
Namespace:              default
CreationTimestamp:      Thu, 01 Apr 2021 12:34:09 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               release=stable
Replicas:               10 desired | 10 updated | 10 total | 10 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:Labels:  release=stableContainers:nginx:Image:        nginxPort:         <none>Host Port:    <none>Environment:  <none>Mounts:       <none>Volumes:        <none>
Conditions:Type           Status  Reason----           ------  ------Progressing    True    NewReplicaSetAvailableAvailable      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   deployment-5849786498 (10/10 replicas created)
Events:Type    Reason             Age   From                   Message----    ------             ----  ----                   -------Normal  ScalingReplicaSet  24m   deployment-controller  Scaled up replica set deployment-5849786498 to 10

1>弹性扩容的3种方法

#1.修改配置清单
[root@k8s-master1 ~]# kubectl edit deployments deployment
spec:progressDeadlineSeconds: 600replicas: 10  #修改这个参数revisionHistoryLimit: 10selector:matchLabels:release: stable解释:
kubectl edit deployments deployment
edit:编辑
deployments:资源类型
deployment:自定义的资源名称[root@k8s-master1 ~]# kubectl get pods -w  #监控pod状态(自动创建10个)
NAME                          READY   STATUS    RESTARTS   AGE
deployment-5849786498-whrht   1/1     Running   0          38m
test                          1/1     Running   1          6d1h
test-tag                      1/1     Running   0          59mdeployment-5849786498-stwbz   0/1     Pending   0          0s
deployment-5849786498-stwbz   0/1     Pending   0          0s
deployment-5849786498-6zpws   0/1     Pending   0          0s
deployment-5849786498-r9q4w   0/1     Pending   0          0s
deployment-5849786498-6zpws   0/1     Pending   0          0s
deployment-5849786498-n7qbv   0/1     Pending   0          1s
deployment-5849786498-cb52r   0/1     Pending   0          1s
deployment-5849786498-krspr   0/1     Pending   0          1s
deployment-5849786498-r9q4w   0/1     Pending   0          1s
deployment-5849786498-xc4z2   0/1     Pending   0          1s
deployment-5849786498-cb52r   0/1     Pending   0          1s#2.命令行打标签
[root@k8s-master1 ~]# kubectl patch deployments.apps deployment -p '{"spec":{"replicas":4}}'   #自动缩容到4台
deployment.apps/deployment patched
[root@k8s-master1 ~]# kubectl patch deployments.apps deployment -p '{"spec":{"replicas":40}}'   #自动扩容到40台
deployment.apps/deployment patched#3.scale
[root@k8s-master1 ~]# kubectl scale deployment/deployment --replicas=4
deployment.apps/deployment scaled

2>更新(首先要存在低版本才可以更新)

#1.编辑django.yaml(基础版本)
apiVersion: apps/v1
kind: Deployment
metadata:name: django
spec:replicas: 1selector:matchLabels:app: stabletemplate:metadata:labels:app: stablespec:containers:- name: nginx1image: nginx:1.17.10#2.创建Pod
[root@k8s-master1 ~]# kubectl apply -f django.yaml 
deployment.apps/django created#监控中 (获取podid)
[root@k8s-master1 ~]# kubectl get pods -w
django-5b8b5bd7f7-79qs6       0/2     Pending   0          0s
django-5b8b5bd7f7-79qs6       0/2     Pending   0          0s
django-5b8b5bd7f7-79qs6       0/2     ContainerCreating   0          0s
django-5b8b5bd7f7-79qs6       2/2     Running             0          15s
django-5b8b5bd7f7-79qs6       1/2     Error               0          17s
django-5b8b5bd7f7-79qs6       2/2     Running             1          18s#进入容器查看版本号
[root@k8s-master1 ~]# kubectl exec -it django-5b8b5bd7f7-79qs6  -- bash
Defaulting container name to nginx2.
Use 'kubectl describe pod/django-5b8b5bd7f7-79qs6 -n default' to see all of the containers in this pod.
root@django-5b8b5bd7f7-79qs6:/# nginx -v
nginx version: nginx/1.17.10#3.更新镜像
## 1)打标签
[root@k8s-master1 ~]# kubectl patch deployments.apps django -p '{"spec":{"template":{"spec":{"containers":[{"image":"nginx:1.18.0", "name":"nginx"}]}}}}'
deployment.apps/django patched
##验证
[root@k8s-master1 ~]# kubectl exec -it django-79d65d8758-wlqv8 -- bash
Defaulting container name to nginx.
Use 'kubectl describe pod/django-79d65d8758-wlqv8 -n default' to see all of the containers in this pod.
root@django-79d65d8758-wlqv8:/# nginx -v
nginx version: nginx/1.18.0## 2)修改配置清单
[root@k8s-master1 ~]# vim django.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: django
spec:replicas: 1selector:matchLabels:app: stabletemplate:metadata:labels:app: stablespec:containers:- name: nginximage: nginx:1.19.9
##验证         
[root@k8s-master1 ~]# kubectl exec -it deployment-5849786498-6zpws -- bash
root@deployment-5849786498-6zpws:/# nginx -v
nginx version: nginx/1.19.9## 3)设置镜像(重点)
[root@k8s-master1 ~]# kubectl set image deployment/django nginx=nginx:1.16.0
##验证
[root@k8s-master1 ~]# kubectl exec -it django-66fd455d7f-rpflf -- bash
root@django-66fd455d7f-rpflf:/# nginx -v
nginx version: nginx/1.16.0## 4)edit
[root@k8s-master1 ~]# kubectl edit deployment.apps djangotemplate:metadata:creationTimestamp: nulllabels:app: stablespec:containers:- image: nginx:1.19.0  #修改版本号imagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File
##验证
[root@k8s-master1 ~]# kubectl exec -it django-57f7d86d66-rdss6 -- bash
root@django-57f7d86d66-rdss6:/# nginx -v

3>回滚

#查看资源历史
[root@k8s-master1 ~]# kubectl rollout history deployment django
deployment.apps/django 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
4         <none>
5         <none>#2.回滚到上一级
[root@k8s-master1 ~]# kubectl rollout undo deployment django
deployment.apps/django 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
5         <none>
6         <none>
注:目前是到第5级,回滚是回滚到4,回滚后4不显示,显示成6,6与4内容一样#3.回滚指定版本
[root@k8s-master1 ~]# kubectl rollout undo deployment django --to-revision=1
deployment.apps/django rolled back
[root@k8s-master1 ~]# kubectl rollout history deployment django
deployment.apps/django 
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
5         <none>
6         <none>
7         <none>
注:回滚到1版本,1不展示,变成7

2)DaemonSet(一般用来监控、收集日志)

在集群中所有的节点上部署只部署一个Pod,删除节点自动删除对应得Pod
特点:每台上有且只有一个

apiVersion: apps/v1  #kubectl explain DaemonSet 查看版本号
kind: DaemonSet
metadata:name: zabbix-agent
spec:selector:matchLabels:app: zabbix-agenttemplate:metadata:labels:app: zabbix-agentspec:containers:- name: zabbix-agentimage: zabbix/zabbix-agent:5.2.6-centos# 更新
1、修改配置文件
[root@k8s-m-01 ~]# kubectl edit daemonsets.apps zabbix-agent 
daemonset.apps/zabbix-agent edited2、打标签的方式
[root@k8s-m-01 ~]# kubectl patch daemonsets.apps zabbix-agent  -p '{"spec":{"template":{"spec":{"containers":[{"image":"zabbix/zabbix-agent:centos-5.2.4", "name":"zabbix-agent"}]}}}}'
daemonset.apps/zabbix-agent patched3、设置镜像
[root@k8s-m-01 ~]# kubectl set image daemonset/zabbix-agent zabbix-agent=zabbix/zabbix-agent:centos-5.2.3
daemonset.apps/zabbix-agent image updated## 回滚到上一个版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent 
daemonset.apps/zabbix-agent rolled back## 回滚到指定版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent --to-revision=1
daemonset.apps/zabbix-agent rolled back

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

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

grafana模板大全

原文&#xff1a;https://www.jianshu.com/p/367d52fe1171 前言&#xff1a; 本篇文章分三部分来介绍常用的grafana模板,数据来源均为prometheus。数据来源为zabbix或其他的请绕行&#xff01; 第一部分 监控容器 推荐ID31468685100008588315 优化315 第二部分 监控物理机…...

1 Linux简介

1 Linux简介 1.1 环境安装与配置 1.1.1 网址访问 https://cloud.tencent.com/act/double11? https&#xff1a;协议。配置sll证书&#xff0c;才有https协议&#xff0c;否则只有http协议。 cloud.tencent.com&#xff1a;80 域名&#xff0c;即IP地…...

系统安全性和保密性设计

一、安全性和保密性设计 计算机及信息技术的应用领域在不断扩展&#xff0c;计算机在政府、企业、民生等各个领域中都得到越来越广泛的应用。与此同时&#xff0c;网络攻击和入侵事件与日俱增&#xff0c;重要机构的信息系统遭黑客袭击的事件时有发生。攻击者可以从容地对那些…...

demo随笔

在我们做项目时&#xff0c;有时候总是会引用到其他的资源&#xff0c;这时候就需要使用iframe来进行引用&#xff0c;那引用之后父页面和子页面要咋进行通信呢&#xff0c;今天遇到一个需求是这样子的&#xff1a;在vue里面嵌入了cesium的地球&#xff0c;地球是第三方做的&am…...

Solr搜索引擎

Solr搜索引擎前言一、下载&#xff1f;二、创建核心三、核心配置文件&#xff08;1&#xff09;包含对应得数据库 账号&#xff0c;密码&#xff0c;url&#xff0c;对应得sql&#xff0c;&#xff08;2&#xff09;查询出的列 对应核心字段上的属性&#xff08;3&#xff09;将…...

MySQL 高级(2): 索引的概念,分类,性能分析

索引优化分析 索引的概念 MySQL 官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL 高效获取数据的数据结构。 可以得到索引的本质&#xff1a;索引是数据结构。可以简单理解为排好序的快速查找数据结构。在数据之外&#xff0c;数据库系统还维护…...

Linux驱动---IO模型

1、什么是IO 在计算机系统中I/O就是输入和输出的意思&#xff0c;只要具有输入输出类型的交互系统都可以认为是I/O系统 也可以说I/O是整个操作系统数据交换与人机交互的通道 针对不同的操作对象&#xff0c; 可以划分为磁盘I/O模型&#xff0c;网络I/O模型&#xff0c;内存映…...

ssh爆破获取用户密码

通过nmap扫描目标主机发现ssh版本为OpenSSH 5.3&#xff0c;有漏洞 漏洞影响版本&#xff08;OpenSSH < 8.3p1&#xff09; 使用msfconsole 工具 search ssh #查找有关ssh的漏洞 找到并使用漏洞use auxiliary/scanner/ssh/ssh_login show options #查看此漏…...

express框架rmvp的使用

文章目录前言一、RMVP是什么&#xff1f;二、搭建基本服务1.构建服务器server.js基本组成2.router文件2.1、如何实现数据的获取GETPOSTPUTPATCHDELETE2.2 如果想要不区分请求方式,一律接收2.3 做rmvp的抽离,抽离controller三、渲染知识补充前端请求静态资源目录&#xff08;快&…...

在java程序中使用protobuf

文章目录简介为什么使用protobuf定义.proto文件编译协议文件详解生成的文件Builders 和 Messages序列化和反序列化协议扩展总结简介 Protocol Buffer是google出品的一种对象序列化的方式&#xff0c;它的体积小传输快&#xff0c;深得大家的喜爱。protobuf是一种平台无关和语言…...

PMP项目管理 | 项目整合管理

PMP项目管理之项目整合管理项目整合管理定义及概念项目整合管理考虑要素项目整合管理过程包括子过程分解4.1 制定项目章程定义理解作用发生时机参与方输入、工具与技术和输出4.2 制定项目管理计划定义理解作用发生时机参与方项目管理计划和文件输入、工具与技术和输出4.3 指导和…...

看完99%的人都学会了!java多态简单例子_ser

认识HTTP 什么是超文本什么是传输什么是协议 HTTP相关组件 网络模型OSI 模型浏览器Web服务器CDNWAFWebServiceHTMLWeb页面构成 与 HTTP 有关的协议 TCP/IPDNSURI / URLHTTPS 详解 HTTP 报文 HTTP请求方法HTTP请求URLHTTP版本HTTP 请求响应过程HTTP 请求特征 HTTP 标头 通用…...

【详细教程】-Python绘图模块Matplotlib

文章目录1 简介2 绘图标记2.1 fmt参数2.2 标记大小与颜色3 绘图线3.1 线的类型3.2 线的颜色3.3 线的宽度3.4 多条线4 轴标签和标题4.1 标题4.2 图形中文显示4.3 标题与标签的定位5 网格线6 绘制多个图6.1 subplot6.2 subplots7 散点图8 柱形图9 饼图1 简介 下面的代码通过两个…...

2021年A特种设备相关管理(锅炉压力容器压力管道)免费试题及A特种设备相关管理(锅炉压力容器压力管道)考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;免费试题是安全生产模拟考试一点通生成的&#xff0c;A特种设备相关管理&#xff08;锅炉压力容器压力管道&#…...

前端类库开发最佳实践

Yarn Lerna Rollup 示例项目 Yarn 通过使用 Yarn 的工作区功能&#xff0c;让 Yarn 根据就依赖关系帮助你分析所有子项目的公共依赖&#xff0c;让所有的子项目的公共依赖只会被下载和安装一次。 Lerna 通过 Lerna 可以将一系列相互耦合比较大、又相互独立的库进行管理&…...

shell 的关联数组

shell 的关联数组 引言 shell也有Map的数据结构&#xff0c;哈哈哈&#xff0c;是挺高大上的。万能的shell。。。。 万恶的mac&#xff0c;sed和linux不一样&#xff0c;关联数组和linux也不要一样。要你干啥&#xff01;&#xff01;&#xff01; 一个需求的处理 感谢这个…...

Cookie对象的使用

Cookie对象是做什么的&#xff1f; 在我的理解里&#xff0c;Cookie是客户端用来和客户端保持通讯信息的一个对象。 怎样使用Cookie 使用一个对象&#xff0c;很显然我们要先创建他 Cookie cookie new Cookie(name, value); 然后用res对象将Cookie发送给客户端 res.addCookie…...

jspdf本地运行环境正常,打包后下载的pdf不全

最近开发过程中遇到个问题&#xff0c;用jspdf配合html2canvas把页面元素下载为pdf文件&#xff0c;在本地运行环境好好的&#xff0c;但是打包之后下载的pdf就是不全的&#xff0c;搜了好久也没找出什么对症的解决方案。 现象就是这样&#xff1a; 正常的文件&#xff1a; 有…...

12013.ADC779x采集芯片

文章目录1 AD7997 特征2 管脚描述3 I2C地址确定3 内部寄存器结构3.1 内部结存器结构3.2 配置寄存器3.3 转换结果寄存器3.4 数据寄存器3.5 Hysteresis Register (CH1/CH2/CH3/CH4) 迟滞寄存器3.6 CYCLE TIMER REGISTER 循环计时寄存器3.7 SAMPLE DELAY AND BIT TRIAL DELAY 样本…...

实训项目-白金手册(个人信息管理系统)

实训项目-个人信息管理系统 文章目录实训项目-个人信息管理系统前言一、前期相关准备1、 编译软件安装2、 基本技术掌握2.1、 信息存储2.1.1、 临时存储2.1.2、 长期存储2.2、 查找排序2.3、 线性表操作2.4、 文件操作2.5、 代码书写规范二、需求分析三、难点疑点分析1、实现读…...

LPL比赛数据可视化,完成这个项目,用尽了我的所有Python知识

LPL比赛数据可视化 效果图 完成这个项目&#xff0c;我感觉我已经被掏空了&#xff0c;我几乎用尽了我会的所有知识 htmlcssjavascriptjQuerypythonrequestsnumpymysqlpymysqljsonajaxflaskecharts 在这个过程中&#xff0c;并不是那么顺利&#xff0c;遇到了很多坑&#xff0…...

模拟,枚举与递推

模拟 模拟指的是将题目描述转化为可执行的代码&#xff0c;其中我们会用到编程语言的基础内容&#xff0c;最常见的就是循环。 简单的题目&#xff0c;通常直接模拟就够了&#xff0c;比如 874. 模拟行走机器人 。 而如果是中等和困难的题目&#xff0c;除了使用模拟&#x…...

一种比较直观地推断递归算法时间复杂度的思路

用快速排序举例 问题规模为N 递归第一层为 N 递归第二层 分成两个分区&#xff0c;每个分区的规模为 N/2 &#xff08;取平均值1/2&#xff09; ... 因为递归一直二分&#xff0c;所以&#xff0c;到了logN层&#xff0c;分无可分。 每一层其实都要遍历整个数组&#xff…...

计组第五章:中央处理器

文章目录CPU的功能和基本结构1.运算器的基本结构①专用数据通路方式②CPU内部单总线方式2.控制器的基本结构小结CPU的功能和基本结构 1.运算器的基本结构 ①专用数据通路方式 AX、BX……这些就和图里的R0、R1……对应 三态门每一路都接上&#xff08;一端接输出一端接输入&am…...

小工具整理

转载&#xff1a; 在线工具 - 你的工具箱 (tool.lu) 1.正则 [正则表达式测试工具 - 在线工具 (tool.lu)](https://tool.lu/regex/) 2.文字加密解密 文字加密解密 - 在线工具 (tool.lu) 3.时间戳转换 时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu) 4.图片压缩 h…...

链表求和。

分析&#xff1a; 定义三个链表&#xff0c;两个链表负责两组数据的存储&#xff0c;第三个链表负责存储结果&#xff0c;前两个链表每个对应位置上的数据相加&#xff0c;注意进位处理&#xff0c;以及如果两个链表不等长的情况。 代码实现&#xff1a; class Solution3 {pu…...

【数组-中等】560. 和为K的子数组

【题目】 给定一个整数数组和一个整数 k&#xff0c;你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] &#xff0…...

Linux --- shell位置参数变量

一、位置参数变量 当我们执行一个shell脚本时 ,如果希望获取到命令行的参数信息&#xff0c;就可以使用到位置参数变量比如: /myshell.sh 100 200&#xff0c;这个就是一个执行shell的命令行 &#xff0c;可以在myshell脚本中获取到参数信息 基本语法&#xff1a; 1.$n (功能…...

源码分析MyCat专栏

源码分析MyCAT1.6目录 1、源码研究mycat之mysql通信协议篇之握手认证协议 2、源码分析mycat1.6之mysql通信协议篇之COM_QUERY(SELECT语句报文解析) 3、源码分析mycat1.6之mysql通信协议篇之存储过程调用 4、源码研读Mycat1.6之网络篇---前端线程模型&#xff08;应用程序与…...

树莓派基于Linux内核驱动开发详解

一、驱动认知 首先理解Linux内核框图 文件系统认知&#xff0c;Linux内核框图 1、什么是驱动 linux内核驱动。软件层面上的驱动 广义上是指&#xff1a;这一段代码操作了硬件去动&#xff0c;所以这一段代码就叫硬件的驱动程序。狭义上驱动程序就是专指操作系统中用来操控硬…...

Android EditText与软键盘

文章目录Android EditText与软键盘windowSoftInputMod 属性adjustPan & adjustResize的区别EditText 获取焦点 & 失去焦点软键盘工具类Android EditText与软键盘 windowSoftInputMod 属性 软键盘状态 属性值说明stateUnspecified系统默认行为。系统会根据不同场景决…...

Java并发编程—线程详解

文章目录线程简介什么是线程多线程的使用什么时候需要使用多线程&#xff1f;写多少个线程比较合适&#xff1f;线程优先级靠谱的让出CPU的方法&#xff1f;线程的状态线程的状态有哪几种&#xff1f;线程的状态转换Daemon线程启动和终止线程构造线程启动线程理解中断如何安全的…...

iOS 键盘高度及获取键盘高度的方法

一、获取键盘高度的方法&#xff1a; - (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//增加监听&#xff0c;当键盘出现或改变时接收消息//加一个textField&#xff0c;以便可以弹出键盘UITextField* textField [[UITextFiel…...

常见键盘高度统计

统计总结&#xff1a; 1.在不同分辨率、不同厂商、不同机型&#xff0c;键盘的高度均存在差异&#xff0c;所以并无决绝对标准。 2.但总体上看&#xff0c;第三方输入法在两个平台中英文大多都一致高度&#xff0c;在苹果上系统自带键盘中英文不一致。 3.安卓较新手机带有虚拟…...

jquery图片放大镜插件—jqzoom

说明&#xff1a;在调用jqzoom图片放大镜插件时&#xff0c;需要准备一大一小两张一样的图片&#xff0c;在页面中显示小图片&#xff0c;当鼠标在小图片中移动时&#xff0c;调用该插件的jqzoom()方法&#xff0c;显示与小图片相同的大图片区域&#xff0c;从而实现放大镜的效…...

html中让图片放大的代码,HTML5图片预览 放大(示例代码)

图片预览* {margin: 0;padding: 0;}.picture {margin: 20px;position: relative;}#show {position: absolute;top: 0;left: 0;width: 98px;height: 98px;border: 1px solid #e8e8e8;background: #fff;opacity: .5;}.wrap {width: 198px;height: 198px;border: 1PX solid #e8e8e…...

Vue - 图片放大镜(vue-piczoom)

vue-piczoom&#xff1a;https://www.npmjs.com/package/vue-piczoom/v/1.0.6 使用图片放大镜插件 vue-piczoom 安装 npm install vue-piczoom --save 使用 <template><div class"wrap"><!-- 组件默认是100%的高宽&#xff0c;所以建议将组件包含在一…...

dw如何点击图片放大的代码_用DW实现图片放大效果

/p>htmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">Magnifier#magnifier{width:342px;height:420px;position:absolute;top:100px;left:250px;font-size:0;border:1px solid #000;}#i...

layui图片放大功能

刚刚的项目里面要做一个图片放大功能&#xff0c;用的layui&#xff0c;直接用layer.open改造了一个&#xff0c;记录一下&#xff01; 页面&#xff1a; <a href"javascript:void(0);" class"img_big" title"图片路径"> …...

【机器学习】支持向量机【上】硬间隔

有任何的书写错误、排版错误、概念错误等&#xff0c;希望大家包含指正。 在阅读本篇之前建议先学习&#xff1a; 【机器学习】拉格朗日对偶性 【机器学习】核函数 由于字数限制&#xff0c;分成两篇博客。 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】…...

easyui图片放大功能(取巧)

先定义一个会话框里面隐藏一个div标签 <div id"dlgdiv" class"easyui-dialog"style"width: 650px; height: 550px; padding: 10px 20px" closed"true"buttons"#dlgdiv-buttons"><div id"divlarge">&…...

多线程-模拟短信群发

/*** 用户实例*/public class User {//用户姓名private String name;//用户idprivate Integer id;public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getId() {return id;}public void setId(Integer id) {this.id i…...

通过阿里云短信服务群发短信

通过阿里云短信服务群发短信 周末回了趟公司, 恰巧遇到产品让我给一批用户发送推广短信, 于是改了下阿里云的demo, sleep时间为0.1ms时速度是100条/min.这是地址, 尚有很大的改进空间, 欢迎指正 !...

shell脚本短信群发

shell脚本短信群发 使用PHP代码实现shell脚本:连接数据库&#xff0c;查数据库的数据&#xff0c;遍历得到所有的手机号引入调用接口中的短信示例代码 PHP方法即可 (www.k780.com)云服务器&#xff1a;1. 新建空文件夹(eg: mkdir test)2. eg: chmod ar test / chmod 777 test设…...

PHP短信群发

群发短信记录 导入excel文件 导入样式HTML js代码 <script>$(document).ready(function(){$("#sendsms").click(function(){var res confirm("确定发送短信");if(res true){sendsms();}});// 导入excel文件$("#exampleInputFile").ch…...

计算机考研最简单的专业,计算机专业有必要考研吗?计算机考研简单的校园都有哪些...

现如今是互联网的年代&#xff0c;所以许多人在报考专业的时候计算机现已变成首选专业&#xff0c;可是每年的毕业生的增多&#xff0c;造就出中、低层的商场有着必定的饱满&#xff0c;然后许多学生都想开始考研&#xff0c;但又觉得没有太大的必要&#xff0c;那么计算机专业…...

北京农学院计算机考研,北京农学院考研难吗

北京农学院考研难吗&#xff1f;1、北京农学院考研是比较容易考的。不在大学考研难度排名前100名单之内。2、考研难易主要还是看招生院校所处的地域、学校名气、院校排名等&#xff0c;因为报考生源的不同&#xff0c;竞争力度也不同。越发达地区特别是像北京&#xff0c;上海这…...

护理专业有必要考计算机吗,护理专业考研有前途吗

护理专业是一门实践性相当强的专业就业前景十分良好&#xff0c;那么护理专业考研的话&#xff0c;有前途吗?很多同学会有这样的疑问&#xff0c;今天沪江小编就来和大家分析一下&#xff0c;希望对大家有所帮助护理考研考试科目&#xff1a;政治、英语、护理综合(护基、内外妇…...

本科学计算机考研考体育学能考上吗,为什么现在很多学生考体育,体育生考研有必要吗?...

原标题&#xff1a;为什么现在很多学生考体育&#xff0c;体育生考研有必要吗&#xff1f;我认为随着中国经济的快速发展体育生读研是有必要的。1、研究生比本科生的就业更好。机遇更大&#xff0c;选择的机会更多。比如本科生毕业&#xff0c;只能考本省的初中小学的老师。研究…...

河北大学适合计算机考研吗,河北大学考研难吗?一般要什么水平才可以进入?...

问&#xff1a;从河北大学毕业的学生就业怎么样&#xff1f;值不值得报考&#xff1f;想要了解河北大学毕业生就业具体情况详见>>>河北大学总之&#xff0c;河北大学就业率相对来说是比较良好的&#xff0c;如果大家对此学校感兴趣的话&#xff0c;可以大胆备考&#…...