Kubernetes之deployment

1用Deployment运行应用

Kubernetes通过各种Controller来管理Pod的生命周期。为了满足不同业务场景,Kubernetes开发了Deployment、ReplicaSet、StatefuleSet、Job等多种Controller。
首先使用最常用的Deployment。

[root@master ~] kubectl   run   nginx-deploy   --image=nginx   --replicas=2

查看

[root@master ~] kubectl get deployments.apps 

在这里插入图片描述

查看更加详细的信息:

[root@master ~]# kubectl    get  deployments.apps

查看副本集:

[root@master nginx]# kubectl get replicasets.apps nginx-deploy-dc9ff4b8c 
NAME                     DESIRED   CURRENT   READY   AGE
nginx-deploy-dc9ff4b8c   2         2         2       29m

查看详细的副本集信息:

[root@master ~]# kubectl   describe replicasets.apps nginx-deploy-dc9ff4b8c

Controlled By指明此Pod是由ReplicaSet nginx-deployment-6c94df7599创建。Events纪录了Pod的启动过程。如果操作失败(比如image不存在),也能在这里查看到原因。

总结一下这个过程:
1)用户通过kubectl创建Deployment。
2)Deployment创建ReplicaSet.
3)ReplicaSet创建Pod。

对象的命名方式是:子对象的名称=父对象的名字+随机字符串或数字。

查看pod

[root@master nginx]# kubectl get pod

在这里插入图片描述

2、k8s创建资源的两种方式

命令vs配置文件

Kubernetes支持两种方式创建资源:
①用kubectl命令直接创建,比如:kubectl run nginx-deployment --image=nginx --replicas=2在命令行中通过参数指定资源的属性。
②通过配置文件和kubectl apply创建,要完成前面的工作,然后执行命令,比如:kubectl apply -f nginx.yml。
命令与配置文件这两种方式的比较:

·基于命令的方式:
①简单直接快捷,上手快。
②适合临时测试或实验。

·基于配置文件的方式:
①配置文件描述了什么,即应用最终要达到的状态。
②配置文件提供了创建资源的模板,能够重复部署。
③可以像管理代码一样管理部署。
④适合正式的、跨环境的、规模化部署。
⑤这种方式要求熟悉配置文件的语法,有一定难度。

kubectl apply不但能够创建Kubernetes资源,也能对资源进行更新,非常方便。不过Kubernetes还提供了几个类似的命令,例如kubectl create、kubectl replace、kubectl edit和kubectl patch。

配置文件内容较多 语句也比较多 也可以用这个方式获得模板:

[root@master ~]# kubectl   create   deployment test --image=nginx  --dry-run  -o  yaml  > nginx.yml  
创键一个deployment 名字叫test 镜像是nginx 现在不执行 保存的格式为yaml
保存到nginx.yml这个文件里

在这里插入图片描述
①apiVersion:当前配置格式的版本。
②kind:要创建的资源类型,这里是Deployment。
③metadata:该资源的元数据,name是必须的元数据项。
④spec:该Deployment的规格说明。
⑤replicas:指明副本数量,默认为1。
⑥template:定义Pod的模板,这是配置文件的重要部分。
⑦metadata:定义Pod的元数据,至少要定义一个label。label的key和value可以任意指定。
⑧spec:描述Pod的规格,此部分定义Pod中每一个容器的属性,name和image是必须的。

此nginx.yml是一个最简单的Deployment配置文件。

查看yml文件里配置格式的版本

[root@master nginx]# kubectl   api-versions

创键一个yml文件:

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

副本的伸缩 只需要修改yml文件的replicas即可 replicas: 5
收缩的话 修改文件nginx.yml replicas: 3

修改配置文件后执行:

kubectl apply   -f  nginx.yml

查看:

[root@master nginx]# kubectl get pod -o wide 

在这里插入图片描述

K8s的故障转移:
关掉node1:

[root@node1 ~]# systemctl poweroff

查看节点:
在这里插入图片描述
可以看到node1的节点的pod已经停止了
当node1再次上线后停掉的pod会被删除,不会再次回到node1上了
在这里插入图片描述

用标签控制pod所在的节点:
添加标签:

[root@master nginx]# kubectl label nodes  k8snode1   test=abc
node/node1 labeled

查看:

[root@master nginx]# kubectl get   nodes  --show-labels 

在这里插入图片描述

将标签添加到nginx.yml文件里控制pod所在节点:
在这里插入图片描述

[root@kmaster nginx]# kubectl  apply -f  nginx.yml 
deployment.apps/nginx-deply configured

查看pod所在节点 是否所有pod在node1上:

[root@master nginx]# kubectl get pod -o wide 

在这里插入图片描述

把nginx.yml里指定标签的语句去掉pod就会在node1和node2上了

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值