k8s基础

  •  k8s中pod配置文件详解

[root@leader /zpf/k8s/resource]$cat nginx-demo.yaml
apiVersion: v1 #api文档版本
kind: Pod #资源对象类型,可以是Pod,Deployment,StatefulSet,等相关对象
metadata:
  name: nginx-demo ##Pod 的名称
  labels: #定义pod的标签
    type: app
    test: 1.0.0 #自定义pod的版本号
  namespace: 'default' #命名空间的配置
spec: ##期望Pod按照这里的描述进行创建
  terminationGracePeriodSeconds: 40 #当被删除的时候,给pod预留多少时间的停止预留时间.
  containers: #对于pod中的容器描述
  - name: nginx # 容器的名称
    image: nginx:1.7.9 #z指定容器的景象以及版本号
    imagePullPolicy: IfNotPresent #镜像拉取策略 这里的意思是总是拉取最新镜像,Never 表示仅使用本地镜像, ifNotPresent 表示如果本地有就用本地的
    lifecycle: #生命周期的配置
      postStart:  #生命周期启动阶段做的事情,不一定在容器的command之前运行
        exec:
          command:
          - sh
          - -c
          - "echo '<h1>pre stop</h1>' > /usr/share/nginx/html/poststop.html"
      preStop: #生命周期结束阶段要做的事情.
        exec:
          command:
          - sh
          - -c
          - "sleep 50;echo 'sleep finished ...' >> /usr/share/nginx/html/poststop.html "
    command:
    - nginx
    - -g
    - 'daemon off;'  #指定容器启动时执行的命令,这里要添加;分号,表示命令结束.
    workingDir: /usr/share/nginx/html #定义容器启动后的工作目录
    ports:
    - name: http #端口名称
      containerPort: 80 #描述容器内要暴漏什么端口
      protocol: TCP #描述该端口是基于那种协议
    env:  #环境变量信息
    - name: JVM_OPTS  #环境变量名称
      value: '-Xms128m -Xmx128m' #环境变量的值
    resources:
      requests:
        cpu: 100m #表示使用0.1个核心. 1000m表示使用一个核心.
        memory: 128Mi #这里表示使用多少M内存空间
      limits:
        cpu: 200m #表示cpu最多使用0.2个核心
        memory: 256Mi #内存最多使用256M
  restartPolicy: Always #服务重启策略,OnFailure,表示异常情况下退出时才会进行重启.Never表示从不重启该pod  这里配置的是Always 表示无论什么情况都会重启
  • 添加label可以在命令行中直接添加临时lable标签.

使用配置文件创建 pod
kubectl apply -f nginx-demo.yaml
查看创建好的pod中的标签
kubectl get pod nginx-demo --show-labels
临时修改pod中的标签信息
kubectl label po nginx-demo language=java
  • 也可以使用修改配置文件来修改label信息.

[root@leader /zpf/k8s/resource]$cat nginx-demo.yaml
apiVersion: v1 #api文档版本
kind: Pod #资源对象类型,可以是Pod,Deployment,StatefulSet,等相关对象
metadata:
  name: nginx-demo ##Pod 的名称
  labels: #定义pod的标签
    type: app
    test: 1.0.0 #自定义pod的版本号
    language: java  #这里添加一个label信息到配置文件中.
  namespace: 'default' #命名空间的配置
spec: ##期望Pod按照这里的描述进行创建
  terminationGracePeriodSeconds: 40 #当被删除的时候,给pod预留多少时间的停止预留时间.
  containers: #对于pod中的容器描述
  - name: nginx # 容器的名称
    image: nginx:1.7.9 #z指定容器的景象以及版本号
    imagePullPolicy: IfNotPresent #镜像拉取策略 这里的意思是总是拉取最新镜像,Never 表示仅使用本地镜像, ifNotPresent 表示如果本地有就用本地的
    lifecycle: #生命周期的配置
      postStart:  #生命周期启动阶段做的事情,不一定在容器的command之前运行
        exec:
          command:
          - sh
          - -c
          - "echo '<h1>pre stop</h1>' > /usr/share/nginx/html/poststop.html"
      preStop: #生命周期结束阶段要做的事情.
        exec:
          command:
          - sh
          - -c
          - "sleep 50;echo 'sleep finished ...' >> /usr/share/nginx/html/poststop.html "
    command:
    - nginx
    - -g
    - 'daemon off;'  #指定容器启动时执行的命令,这里要添加;分号,表示命令结束.
    workingDir: /usr/share/nginx/html #定义容器启动后的工作目录
    ports:
    - name: http #端口名称
      containerPort: 80 #描述容器内要暴漏什么端口
      protocol: TCP #描述该端口是基于那种协议
    env:  #环境变量信息
    - name: JVM_OPTS  #环境变量名称
      value: '-Xms128m -Xmx128m' #环境变量的值
    resources:
      requests:
        cpu: 100m #表示使用0.1个核心. 1000m表示使用一个核心.
        memory: 128Mi #这里表示使用多少M内存空间
      limits:
        cpu: 200m #表示cpu最多使用0.2个核心
        memory: 256Mi #内存最多使用256M
  restartPolicy: Always #服务重启策略,OnFailure,表示异常情况下退出时才会进行重启.Never表示从不重启该pod  这里配置的是Always 表示无论什么情况都会重启

这里在配置文件中添加了一个languang:java的标签.

使用命令行获取指定标签下的pod.

kubectl get po  -l language=java

 查看指定label下的对应的pod,并查看该pod的所有的label信息.

kubectl get po -l language=java --show-labels

通过条件删选label标签对应的pod信息,

kubectl get pod -l 'test in (1.0.0,1.1.0,1.2.0)'
这表示test标签的值是1.0.0 或者 1.1.0 或者1.2.0 满足任意一个test value就可以被查询出来.

查询条件指定排除某些条件进行查询.

kubectl get pod -l version!=1.2.0,language=java --show-labels
这里表示满足version!= 1.2.0 并且language=java的pod筛选出来
  • 一个简单的deployment的相关信息注解

apiVersion: apps/v1   #deploy api版本
kind: Deployment  #资源类型为deployment
metadata:  #原数据标签
  labels: #标签
    app: nginx-deploy   #这里是deploy的label标签用来与后面的rs与pod进行关联
  name: nginx-deploy  #deployment 名字
  namespace: default  #默认命名空间
spec:  #
  replicas: 1  #期望副本数
  revisionHistoryLimit: 10  #进行滚动更新后,保留的历史版本数量
  selector:  #选择器,用于找到匹配的RS
    matchLabels:  #按照标签匹配
      app: nginx-deploy  #在deploy中关联rs的字段使用的就是selector
  strategy:
    rollingUpdate:  #滚动更新配置
      maxSurge: 25% #表示在更新的时候可以有25%额外的pod出现.超过期望副本数的比例是25%
      maxUnavailable: 25%  #最多可以允许25%的pod在更新时处于不可用状态.
    type: RollingUpdate  #更新类型,指定为滚动更新
  template:  #pod模板,
    metadata: #pod原数据信息
      labels: #pod标签
        app: nginx-deploy  #这里是rs与pod之间的关联字段
    spec:  #pod期望信息
      containers:  #破的容器相关信息
      - image: nginx:1.7.9  #pod使用的镜像版本
        imagePullPolicy: IfNotPresent  #pod镜像拉取策略
        name: nginx  #pod名称
      restartPolicy: Always  #重启策略
      terminationGracePeriodSeconds: 30 #宽限时间
 #说明一下,这里三个资源类型的关联就是使用文中的nginx-deploy来进行关联的.

说明一下,label标签中如果有数字类型,那么需要使用引号引起来.因为label标签中默认支持string类型,

deployment滚动更新

一般滚动更新的触发条件是修改了pod的版本号会触发重新拉取镜像的操作,这个过程会触发滚动更新,滚动更新结果可以使用

[root@leader /zpf/k8s/resource]$kubectl get deploy -w
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   3/3     3            3           34m

其中 

UP-TO-DATE: 字段表示的就是容器更新次数.

AVAILABLE : 表示当前最大可用副本数,

或者使用

$kubectl rollout status deploy nginx-deploy 

deployment "nginx-deploy" successfully rolled out

查看表示这个deployment已经滚动更新完成

如果想要查看滚动更新的历史过程可以使用

$kubectl describe deploy nginx-deploy
.
.
.
Events:
  Type    Reason             Age                From                   Message
  ----    ------             ----               ----                   -------
  Normal  ScalingReplicaSet  45m                deployment-controller  Scaled up replica set nginx-deploy-845964f5bf to 3
  Normal  ScalingReplicaSet  37m                deployment-controller  Scaled up replica set nginx-deploy-845964f5bf to 5
  Normal  ScalingReplicaSet  15m                deployment-controller  Scaled down replica set nginx-deploy-845964f5bf to 3
  Normal  ScalingReplicaSet  12m                deployment-controller  Scaled down replica set nginx-deploy-845964f5bf to 0
  Normal  ScalingReplicaSet  11m                deployment-controller  Scaled up replica set nginx-deploy-845964f5bf to 1
  Normal  ScalingReplicaSet  11m                deployment-controller  Scaled down replica set nginx-deploy-968b78ccf to 2
  Normal  ScalingReplicaSet  11m (x2 over 12m)  deployment-controller  Scaled up replica set nginx-deploy-968b78ccf to 2
  Normal  ScalingReplicaSet  11m (x2 over 14m)  deployment-controller  Scaled up replica set nginx-deploy-968b78ccf to 1
  Normal  ScalingReplicaSet  11m (x2 over 12m)  deployment-controller  Scaled down replica set nginx-deploy-845964f5bf to 2
  Normal  ScalingReplicaSet  11m (x2 over 12m)  deployment-controller  Scaled down replica set nginx-deploy-845964f5bf to 1
  Normal  ScalingReplicaSet  11m (x2 over 12m)  deployment-controller  Scaled up replica set nginx-deploy-968b78ccf to 3
  Normal  ScalingReplicaSet  11m (x5 over 11m)  deployment-controller  (combined from similar events): Scaled down replica set nginx-deploy-845964f5bf to 0

其中Events中会详细的记录滚动更新的过程.包括每次新建副本的数量以及结束副本的数量.

查看deploy历史版本,

这里说明一下,只有重新拉取镜像操作才会出发版本更新,只有副本数的变化不属于版本更新,

说明一下,先决条件1,

        在更新版本的时候不要使用kubectl delete rs nginx-deploy 删除历史rs信息.会导致版本的缺失.因为在回退的时候会用deploy与rs进行关联,如果将rs删除,那么就无将两者进行关联,导致无法找到回滚版本,

先决条件2,

        要在deploy的yaml文件中注明,revisionHistorylimit:10 表示留存过去10个版本.如果没有声明的话那么就无法保留历史版本信息,就无法进行回滚.

spec:  #
  replicas: 3  #期望副本数
  revisionHistoryLimit: 10  #进行滚动更新后,保留的历史版本数量
  • 查看deployment的历史版本信息.历史版本不会显示当前正在运行的版本.
$kubectl rollout history deployment nginx-deploy
deployment.apps/nginx-deploy
REVISION  CHANGE-CAUSE
4         <none>
5         <none>

查看指定版本的deployment信息.

$kubectl rollout history deployment nginx-deploy --revision=4
deployment.apps/nginx-deploy with revision #4
Pod Template:
  Labels:	app=nginx-deploy
	pod-template-hash=968b78ccf
  Containers:
   nginx:
    Image:	nginx:1.9.1
    Port:	<none>
    Host Port:	<none>
    Environment:	<none>
    Mounts:	<none>
  Volumes:	<none>

使用命令退回之前指定版本操作

$kubectl rollout undo deploy nginx-deploy --to-revision=4
deployment.apps/nginx-deploy rolled back
$kubectl rollout undo deploy nginx-deploy --to-revision=5
deployment.apps/nginx-deploy rolled back

更新后的版本会进行版本递增操作.被回滚的版本会变成新的版本.

$kubectl rollout history deploy nginx-deploy
deployment.apps/nginx-deploy
REVISION  CHANGE-CAUSE
6         <none>
7         <none>

  • deployment 扩缩容

使用scale进行deploy的扩缩容服务.可以直接进行副本数量的变更,副本数变更不属于版本变更,所以不适用于版本回滚.

 这里使用sacle将 nginx-deploy的副本数扩容到5个.

$kubectl scale --replicas=5 deploy nginx-deploy
deployment.apps/nginx-deploy scaled
[root@leader /zpf/k8s/resource]$kubectl get deploy
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   5/5     5            5           138m

缩容方式同理,将--replicas的数量变更成指定数量即可.

  • deployment暂停与恢复

暂停已经启动的deployment,这里的暂停是指服务版本以及修改的版本等信息是无法直接更新的,(针对edit来说的),

这里使用rollout pause 来暂停指定的deployment

$kubectl rollout pause deploy nginx-deploy
deployment.apps/nginx-deploy paused
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值