k8s-Deployment 使用

30 篇文章 0 订阅
18 篇文章 0 订阅

Deployment

先运行一个 Deployment

[root@master ~]# kubectl  run nginx-1  --image=nginx  --replicas=2
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx-1 created

查看Deployment 状态:

[root@master ~]# kubectl  get deployments.apps  nginx-1
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
nginx-1   2/2     2            2           19s

还可以详细查看:

[root@master ~]# kubectl  describe  deployments.apps nginx-1
Name:                   nginx-1
Namespace:              default
CreationTimestamp:      Tue, 14 Jul 2020 16:52:13 +0800
Labels:                 run=nginx-1
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=nginx-1
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginx-1
  Containers:
   nginx-1:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-1-56756dd7cf (2/2 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  40s   deployment-controller  Scaled up replica set nginx-1-56756dd7cf to 2

Events 记录了两个副本 Pod 的创建。

详细查看副本资源:

[root@master ~]# kubectl  get replicasets.apps  nginx-1-56756dd7cf
NAME                 DESIRED   CURRENT   READY   AGE
nginx-1-56756dd7cf   2         2         2       2m6s
[root@master ~]# kubectl  describe replicasets.apps  nginx-1-56756dd7cf
Name:           nginx-1-56756dd7cf
Namespace:      default
Selector:       pod-template-hash=56756dd7cf,run=nginx-1
Labels:         pod-template-hash=56756dd7cf
                run=nginx-1
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 1
Controlled By:  Deployment/nginx-1
Replicas:       2 current / 2 desired
Pods Status:    2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  pod-template-hash=56756dd7cf
           run=nginx-1
  Containers:
   nginx-1:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age    From                   Message
  ----    ------            ----   ----                   -------
  Normal  SuccessfulCreate  2m48s  replicaset-controller  Created pod: nginx-1-56756dd7cf-wdvdt
  Normal  SuccessfulCreate  2m48s  replicaset-controller  Created pod: nginx-1-56756dd7cf-7plfz

查看Pod:

[root@master ~]# kubectl get pod
NAME                       READY   STATUS    RESTARTS   AGE
nginx-1-56756dd7cf-7plfz   1/1     Running   0          3m1s
nginx-1-56756dd7cf-wdvdt   1/1     Running   0          3m1s

查看 Pod 的详细信息:

[root@master ~]# kubectl  describe pod nginx-1-56756dd7cf-7plfz 
Name:         nginx-1-56756dd7cf-7plfz
Namespace:    default
Priority:     0
Node:         node1/192.168.19.161
Start Time:   Tue, 14 Jul 2020 16:52:13 +0800
Labels:       pod-template-hash=56756dd7cf
              run=nginx-1
Annotations:  <none>
Status:       Running
IP:           10.244.1.9
IPs:
  IP:           10.244.1.9
Controlled By:  ReplicaSet/nginx-1-56756dd7cf
Containers:
  nginx-1:
    Container ID:   docker://b4c9452b04733f4645f42d4c4d68810417cb47b5c4ad996f8ae8247e50ef293a
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:a93c8a0b0974c967aebe868a186e5c205f4d3bcb5423a56559f2f9599074bbcd
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 14 Jul 2020 16:52:30 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-ctnk4 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-ctnk4:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-ctnk4
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  3m17s  default-scheduler  Successfully assigned default/nginx-1-56756dd7cf-7plfz to node1
  Normal  Pulling    3m16s  kubelet, node1     Pulling image "nginx"
  Normal  Pulled     3m     kubelet, node1     Successfully pulled image "nginx"
  Normal  Created    3m     kubelet, node1     Created container nginx-1
  Normal  Started    3m     kubelet, node1     Started container nginx-1

过程: 用户通过 kubectl 创建 Deployment,Deployment 创建 ReplicaSet,ReplicaSet 创建 Pod。

对象的命名方式是:子对象的名字 = 父对象名字 + 随机字符串(数字)

k8s 创建资源的两种方式

1.使用 kubectl 直接创建
2.通过配置文件(.yml)和 kubectl apply 创建

可以直接生成一个yml文件:

[root@master ~]# kubectl  create  deployment   nginx --image=nginx --dry-run -o yaml > nginx.yml
[root@master ~]# cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

基于命令的方式:

  • 简单直观快捷,上手快
  • 适合临时测试或实验

基于配置文件的方式:

  • 描述了 What,即应用最终要达到的状态
  • 提供了创建资源的模班,能够重复部署
  • 可以向管理代码一样管理部署
  • 适合正式的,跨环境的,规模化部署
  • 要求熟悉配置文件的语法,有一定难度
Deployment YAML

编写一个 yml 文件:

[root@master nginx]# cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-deployment
  name: nginx-deployment
spec:
  replicas:  2
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-deployment
    spec:
      containers:
      - image: nginx
        name: nginx
  • apiVersion    配置文件格式的版本
  • Kind              创键资源的类型
  • Metadata      资源的元数据
  • Labels          资源的标签
  • Name           资源的名字
  • Spec这个     资源的规格
  • Replicas       副本的个数
  • Template      pod的模板
  • metadata     pod的元数据
  • labels           pod的标签
  • spec             pod的规格
  • -image          pod使用那个镜像
  • Name           pod的名字

开始部署:

[root@master nginx]# kubectl  apply -f nginx.yml 
deployment.apps/nginx-deployment created

查看其资源:

[root@master nginx]# kubectl  get deployments.apps 
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           41s
[root@master nginx]# kubectl  get replicasets.apps 
NAME                         DESIRED   CURRENT   READY   AGE
nginx-deployment-ddd976fc7   2         2         2       78s
[root@master nginx]# kubectl  get pod -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
nginx-deployment-ddd976fc7-frz4p   1/1     Running   0          53s   10.244.1.10   node1   <none>           <none>
nginx-deployment-ddd976fc7-hrp2s   1/1     Running   0          53s   10.244.2.11   node2   <none>           <none>

删除资源:

[root@master nginx]# kubectl  delete -f nginx.yml 
deployment.apps "nginx-deployment" deleted
或者
kubectl delete deployment nginx-deployment

Scale Up/Down

伸缩只需修改 yml 文件对应的 副本数即可

将副本数改为 3 个:

[root@master nginx]# cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-deployment
  name: nginx-deployment
spec:
  replicas:  3
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-deployment
    spec:
      containers:
      - image: nginx
        name: nginx

部署

[root@master nginx]# kubectl  apply  -f nginx.yml 

查看副本:

[root@master nginx]# kubectl  get pod -o wide
NAME                               READY   STATUS    RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
nginx-deployment-ddd976fc7-kc6vr   1/1     Running   0          2m5s   10.244.2.12   node2    <none>           <none>
nginx-deployment-ddd976fc7-nk9zl   1/1     Running   0          2m5s   10.244.1.11   node1    <none>           <none>
nginx-deployment-ddd976fc7-zb7g8   1/1     Running   0          23s    10.244.0.11   master   <none>           <none>

K8s 的节点如果 down 了,会将其上面的 Pod 标记为 Unknown,并在其他节点上创建 Pod,维持总副本数,即使那个节点恢复了,Unknown 的 Pod 会被删除,不过运行 Pod 也不会调回那个节点了

出于安全考虑,默认配置下 k8s 不会将 Pod 调度到 master 节点,
如果想使用 master 节点,执行下面命令:

[root@master ~]# kubectl  taint node master node-role.kubernetes.io/master-
node/master untainted

恢复 master only 的状态:

[root@master ~]# kubectl  taint  node master node-role.kubernetes.io/master="":NoSchedule
node/master tainted

用 label 控制 Pod 的位置:

label 可以将 Pod 部署到你想部署的节点上面

[root@master nginx]# kubectl  label nodes node1 disktype=ssd
node/node1 labeled
[root@master nginx]# kubectl  get nodes --show-labels 
NAME     STATUS   ROLES    AGE   VERSION   LABELS
master   Ready    master   5d    v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1    Ready    <none>   5d    v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
node2    Ready    <none>   5d    v1.17.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux

disktype=ssd 已经添加到 node1 上面了
编辑 yml 文件,指定:

[root@master nginx]# cat nginx.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-deployment
  name: nginx-deployment
spec:
  replicas:  3
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-deployment
    spec:
      containers:
      - image: nginx
        name: nginx
      nodeSelector:
        disktype: ssd

在 Pod 的模班 spec 里通过 nodeSelector 指定将此 Pod 部署到具有 label disktype=ssd 的 Node 上。

部署查看:

[root@master nginx]# kubectl  apply  -f nginx.yml
deployment.apps/nginx-deployment configured
[root@master nginx]# kubectl  get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
nginx-deployment-65458ffb99-555d2   1/1     Running   0          40s   10.244.1.13   node1   <none>           <none>
nginx-deployment-65458ffb99-d68hk   1/1     Running   0          52s   10.244.1.12   node1   <none>           <none>
nginx-deployment-65458ffb99-t5vjl   1/1     Running   0          23s   10.244.1.14   node1   <none>           <none>

删除 label:

[root@master nginx]# kubectl label  nodes node1 disktype-
node/node1 labeled
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值