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上了

在这里插入图片描述

### Kubernetes Deployment 创建、配置与管理 #### 创建 Deployment 为了在 Kubernetes 中创建一个 Deployment,通常需要编写 YAML 文件来定义所需的资源。下面是一个简单的 Nginx Deployment 定义文件 `nginx-deployment.yaml`: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` 通过运行命令可应用此配置并启动三个副本的 Nginx Pod[^1]。 ```bash kubectl apply -f nginx-deployment.yaml ``` #### 配置 Deployment Deployment 的配置主要集中在 `.spec.template.spec.containers[]` 下面的部分,这里可以指定容器镜像版本、环境变量、卷挂载等参数。对于更复杂的场景,还可以设置自动扩展策略、健康检查探针以及更新策略等内容。 例如,在上面的例子中修改容器端口映射或增加环境变量如下所示: ```yaml containers: - name: nginx image: nginx:latest env: - name: EXAMPLE_ENV_VAR value: "example_value" ports: - containerPort: 8080 ``` #### 管理 Deployment 一旦 Deployment 被成功创建之后,可以通过多种方式对其进行管理和维护。常见的操作包括但不限于查看状态、滚动升级、回滚到之前的版本等。 ##### 查看状态 要获取关于特定 Pod 更多的信息,比如事件日志或者其他诊断数据,可以执行以下命令[^3]: ```bash kubectl describe pod <pod-name> ``` 这有助于理解为什么某些 Pods 可能未能正常启动或者遇到了其他问题。 ##### 更新和回滚 当想要改变现有应用程序的行为时(如更改使用的 Docker 映像),只需编辑相应的 YAML 文件再重新提交即可触发一次新的部署过程。如果新版本存在问题,则很容易利用内置的历史记录功能来回退至前一稳定版。 ##### 故障排除 面对潜在的问题,除了上述提到的方法外,还有专门针对 Kubernetes Deployment 排查故障的文章提供了详尽指导,帮助定位和解决问题所在[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值