0002-Deployment-create
创建 deployment 类型应用 ¶
通过创建 YAML 的描述文件,k8s 根据这个 YAML来创建相对应的资源对象。
- 创建文件 nginx-deployment.yaml ,内容如下:
查看 pod
2. 应用 YAML 文件创建 deployment
apiVersion: v1
kind: Namespace # 配置的类型,我们使用的是 Namespace
metadata:
name: datarc # 命令空间名称
---
apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment #该配置的类型,我们使用的是 Deployment
metadata: #译名为元数据,即 Deployment 的一些基本属性和信息
namespace: datarc #命名空间
name: nginx-deployment #Deployment 的名称
labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
app: nginx #为该Deployment设置key为app,value为nginx的标签
spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
replicas: 2 # 使用该 Deployment 创建两个应用程序实例
selector: #标签选择器,与上面的标签共同作用,目前不需要理解
matchLabels: #选择包含标签app:nginx的资源
app: nginx
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: nginx #container的名称
image: nginx:1.7.9 #使用镜像nginx:1.7.9创建container,该container默认80端口可访问
ports:
- containerPort: 80
[root@k8smaster001 ~]# kubectl apply -f nginx-deployment.yaml
namespace/datarc unchanged
deployment.apps/nginx-deployment created
[root@k8smaster001 ~]# kubectl get deployment -n datarc
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 74s
[root@k8smaster001 ~]# kubectl get replicasets -n datarc
NAME DESIRED CURRENT READY AGE
nginx-deployment-54bbf55b54 2 2 2 2m32s
访问 deployment ¶
[root@k8smaster001 ~]# kubectl get pod -n datarc -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-54bbf55b54-bmppd 1/1 Running 0 3m7s 10.244.87.210 k8sworker001 <none> <none>
nginx-deployment-54bbf55b54-gcnrm 1/1 Running 0 3m7s 10.244.35.30 k8sworker002 <none> <none>
pod 在 k8s-worker001 k8sworker002 节点 , pod 的 IP 为 10.244.87.210 10.244.35.30
所有集群节点的IP都为10.244.0.0/16
这个大网段内的子网
[root@k8smaster002 ~]# curl 10.244.35.30
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
删除 deployment 中的 pod ¶
- 删除pod(注意: 是删除deployment中的pod)
删除 pod 会立即拉起 replicas 定义的数量
[root@k8smaster002 ~]# kubectl get pod -n datarc -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-9d6cbcc65-9g7vd 1/1 Running 0 4m57s 10.244.35.33 k8sworker002 <none> <none>
nginx-deployment-9d6cbcc65-dhps5 1/1 Running 0 12m 10.244.87.208 k8sworker001 <none> <none>
[root@k8smaster002 ~]# kubectl delete pod nginx-deployment-9d6cbcc65-9g7vd -n datarc
pod "nginx-deployment-9d6cbcc65-9g7vd" deleted
# 再次查看,发现又重新启动了一个 pod,节点 和 IP 地址也变化
[root@k8smaster002 ~]# kubectl get pod -n datarc
[root@k8smaster002 ~]# kubectl get pod -n datarc -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-9d6cbcc65-cwsxn 1/1 Running 0 4s 10.244.35.34 k8sworker003 <none> <none>
nginx-deployment-9d6cbcc65-dhps5 1/1 Running 0 12m 10.244.87.208 k8sworker001 <none> <none>
pod 的 IP 不是固定的,比如把整个集群关闭再启动, pod 也会自动启动,但是 IP 地址也会变化,既然 IP 地址不是固定的,所以需要一个固定的访问 endpoint 给用户,那么这种方式就是 service.
pod 版本升级 ¶
1. 查看帮助
kubectl set image -h
2. 升级前验证 image 版本
[root@k8smaster002 ~]# kubectl describe deployment nginx-deployment -n datarc |grep Image:
Image: nginx:1.7.9
[root@k8smaster001 ~]# kubectl set image deployment nginx-deployment -n datarc nginx=nginx:1.8.1 --record
deployment.apps/nginx-deployment image updated
[root@k8smaster001 ~]# kubectl describe deployment nginx-deployment -n datarc |grep Image
Image: nginx:1.8.1
删除deployment ¶
如果使用 kubectl delete deployment my-deployment
命令删除 deployment ,那么里面的 pod 也会被自动删除
指定文件删除、再次查看发现 deployment 已被删除
[root@k8smaster001 ~]# kubectl get pod -n datarc
NAME READY STATUS RESTARTS AGE
nginx-deployment-9d6cbcc65-2jfvd 1/1 Running 0 2s
nginx-deployment-9d6cbcc65-p65fc 1/1 Running 0 2s
[root@k8smaster001 ~]# kubectl delete -f nginx-deployment.yaml
namespace "datarc" deleted
deployment.apps "nginx-deployment" deleted
[root@k8smaster001 ~]# kubectl get pod -n datarc
No resources found in datarc namespace.
指定 deployment 资源 和具体的 deployment 名称
[root@k8smaster001 ~]# kubectl get pod -n datarc
NAME READY STATUS RESTARTS AGE
nginx-deployment-9d6cbcc65-kgtk4 1/1 Running 0 51m
nginx-deployment-9d6cbcc65-p98d6 1/1 Running 0 51m
[root@k8smaster001 ~]# kubectl delete deployment nginx-deployment -n datarc
deployment.apps "nginx-deployment" deleted
[root@k8smaster001 ~]# kubectl get pod -n datarc
No resources found in datarc namespace.