Deployment YAML方式创建Nginx服务


replication controller

Replication Controller为Kubernetes的一个核心内容,应用托管到Kubernetes之后,需要保证应用能够持续的运行,Replication Controller就是这个保证的key,主要的功能如下:
1.确保pod数量:它会确保Kubernetes中有指定数量的Pod在运行。如果少于指定数量的pod,Replication Controller会创建新的,反之则会删除掉多余的以保证Pod数量不变。 2.确保pod健康:当pod不健康,运行出错或者无法提供服务时,Replication Controller也会杀死不健康的pod,重新创建新的。 3.弹性伸缩 :在业务高峰或者低峰期的时候,可以通过Replication Controller动态的调整pod的数量来提高资源的利用率。同时,配置相应的监控功能(Hroizontal Pod Autoscaler),会定时自动从监控平台获取Replication Controller关联pod的整体资源使用情况,做到自动伸缩。 4.滚动升级:滚动升级为一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定,在初始化升级的时候就可以及时发现和解决问题,避免问题不断扩大。
 
 
Deployment
Deployment同样为Kubernetes的一个核心内容,主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性: 

1.Replication Controller全部功能:Deployment继承了上面描述的Replication Controller全部功能。
2.事件和状态查看:可以查看Deployment的升级详细进度和状态。
3.回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。
4.版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。
5.暂停和启动:对于每一次升级,都能够随时暂停和启动。
6.多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。
 
 

1
、创建deployment [root@linux-node1 ~]# vim nginx-deployment.yaml  #使用yaml的方式进行创建应用 apiVersion: apps/v1  #apiVersion是当前配置格式的版本 kind: Deployment    #kind是要创建的资源类型,这里是Deploymnet metadata:        #metadata是该资源的元数据,name是必须的元数据项 name: nginx-deployment labels: app: nginx spec:          #spec部分是该Deployment的规则说明 replicas: 3      #relicas指定副本数量,默认为1 selector: matchLabels: app: nginx template:      #template定义Pod的模板,这是配置的重要部分 metadata:     #metadata定义Pod的元数据,至少要顶一个label,label的key和value可以任意指定 labels: app: nginx spec:       #spec描述的是Pod的规则,此部分定义pod中每一个容器的属性,name和image是必需的 containers: - name: nginx image: nginx:1.13.12 ports: - containerPort: 80 [root@linux-node1 ~]# kubectl create -f nginx-deployment.yaml #创建nginx-deployment应用 deployment.apps "nginx-deployment" created 2、查看deployment [root@linux-node1 ~]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE net-test 2 2 2 2 32m nginx-deployment 3 3 3 0 10s [root@linux-node1 ~]# kubectl describe deployment nginx-deployment #查看deployment详情 Name: nginx-deployment Namespace: default CreationTimestamp: Thu, 16 Aug 2018 16:13:37 +0800 Labels: app=nginx Annotations: deployment.kubernetes.io/revision=1 Selector: app=nginx Replicas: 3 desired | 3 updated | 3 total | 0 available | 3 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.13.12 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available False MinimumReplicasUnavailable Progressing True ReplicaSetUpdated OldReplicaSets: <none> NewReplicaSet: nginx-deployment-6c45fc49cb (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set nginx-deployment-6c45fc49cb to 3

3、查看Pod [root@linux-node1 ~]# kubectl get pod #查看pod在状态,正在创建中,此时应该正在拉取镜像 NAME READY STATUS RESTARTS AGE net-test-5767cb94df-djt98 1/1 Running 0 22m net-test-5767cb94df-hcwv7 1/1 Unknown 0 34m net-test-5767cb94df-zb8m4 1/1 Running 0 34m nginx-deployment-6c45fc49cb-dmc22 0/1 ContainerCreating 0 2m nginx-deployment-6c45fc49cb-fd8xm 0/1 ContainerCreating 0 2m nginx-deployment-6c45fc49cb-sc8sh 0/1 ContainerCreating 0 2m [root@linux-node1 ~]# kubectl describe pod nginx-deployment-6c45fc49cb-dmc22 #查看具体某个pod的状态信息 [root@linux-node1 ~]# kubectl get pod -o wide  #创建成功,状态为Running NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-djt98 1/1 Running 0 24m 10.2.73.3 192.168.56.13 net-test-5767cb94df-hcwv7 1/1 Unknown 0 36m 10.2.10.2 192.168.56.12 net-test-5767cb94df-zb8m4 1/1 Running 0 36m 10.2.73.2 192.168.56.13 nginx-deployment-6c45fc49cb-dmc22 1/1 Running 0 4m 10.2.73.6 192.168.56.13 nginx-deployment-6c45fc49cb-fd8xm 1/1 Running 0 4m 10.2.73.4 192.168.56.13 nginx-deployment-6c45fc49cb-sc8sh 1/1 Running 0 4m 10.2.73.5 192.168.56.13 Deployment、ReplicaSet、Pod 都已经就绪。如果要删除这些资源,执行 kubectl delete deployment nginx-deployment 或者 kubectl delete -f nginx-deployment.yaml。 4、测试Pod访问 [root@linux-node1 ~]# curl --head http://10.2.73.6 HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Thu, 16 Aug 2018 08:18:14 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT Connection: keep-alive ETag: "5acb8e45-264" Accept-Ranges: bytes 5、更新Deployment [root@linux-node1 ~]# kubectl set image deployment/nginx-deployment nginx=nginx:1.15.2 --record #nginx的版本升级,由1.13.2升级为1.15.2,记录需要加参数--record deployment.apps "nginx-deployment" image updated [root@linux-node1 ~]# kubectl get deployment -o wide  #查看更新后的deployment,可以看到当前4个副本,说明还在滚动升级中 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR net-test 2 2 2 2 39m net-test alpine run=net-test nginx-deployment 3 4 1 3 6m nginx nginx:1.15.2 app=nginx 6、查看更新历史 [root@linux-node1 ~]# kubectl rollout history deployment/nginx-deployment #查看更新历史记录 deployments "nginx-deployment" REVISION CHANGE-CAUSE 1 <none> 2 kubectl set image deployment/nginx-deployment nginx=nginx:1.15.2 --record=true
7、查看具体某一个版本的升级历史 [root@linux-node1 ~]# kubectl rollout history deployment/nginx-deployment --revision=1 deployments "nginx-deployment" with revision #1 Pod Template: Labels: app=nginx pod-template-hash=2701970576 Containers: nginx: Image: nginx:1.13.12 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none>

8、查看更新后的Deployment,并进行访问 [root@linux-node1 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-djt98 1/1 Running 0 30m 10.2.73.3 192.168.56.13 net-test-5767cb94df-hcwv7 1/1 Unknown 0 42m 10.2.10.2 192.168.56.12 net-test-5767cb94df-zb8m4 1/1 Running 0 42m 10.2.73.2 192.168.56.13 nginx-deployment-64749d4b59-djttr 1/1 Running 0 37s 10.2.73.8 192.168.56.13 nginx-deployment-64749d4b59-jp7fw 1/1 Running 0 3m 10.2.73.7 192.168.56.13 nginx-deployment-64749d4b59-q4fsn 1/1 Running 0 33s 10.2.73.9 192.168.56.13 [root@linux-node1 ~]# curl --head http://10.2.73.7 HTTP/1.1 200 OK Server: nginx/1.15.2  #版本已经升级为1.15.2 Date: Thu, 16 Aug 2018 08:24:09 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 24 Jul 2018 13:02:29 GMT Connection: keep-alive ETag: "5b572365-264" Accept-Ranges: bytes 9、快速回滚到上一个版本 [root@linux-node1 ~]# kubectl rollout undo deployment/nginx-deployment #回滚上一个版本 deployment.apps "nginx-deployment" [root@linux-node1 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-djt98 1/1 Running 0 32m 10.2.73.3 192.168.56.13 net-test-5767cb94df-hcwv7 1/1 Unknown 0 43m 10.2.10.2 192.168.56.12 net-test-5767cb94df-zb8m4 1/1 Running 0 43m 10.2.73.2 192.168.56.13 nginx-deployment-6c45fc49cb-b9h84 1/1 Running 0 24s 10.2.73.11 192.168.56.13 nginx-deployment-6c45fc49cb-g4mrg 1/1 Running 0 26s 10.2.73.10 192.168.56.13 nginx-deployment-6c45fc49cb-k29kq 1/1 Running 0 21s 10.2.73.12 192.168.56.13 [root@linux-node1 ~]# curl --head http://10.2.73.10 HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Thu, 16 Aug 2018 08:25:35 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT Connection: keep-alive ETag: "5acb8e45-264" Accept-Ranges: bytes 回滚完成,每一次更新或者回滚ip都会变化,所以需要通过vip进行访问,这就引入了service 10、使用service的vip进行访问应用 [root@linux-node1 ~]# vim nginx-service.yaml  #使用yaml方式创建service kind: Service apiVersion: v1 metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 [root@linux-node1 ~]# kubectl create -f nginx-service.yaml   #创建service service "nginx-service" created [root@linux-node1 ~]# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 4h nginx-service ClusterIP 10.1.213.126 <none> 80/TCP 15s  #这个就是vip [root@linux-node2 ~]# curl --head http://10.1.213.126  #在node2节点上进行访问vip测试,在node1上无法访问是因为没有安装kube-proxy导致无法访问 HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Thu, 16 Aug 2018 08:30:08 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT Connection: keep-alive ETag: "5acb8e45-264" Accept-Ranges: bytes

11、扩容到5个节点 [root@linux-node1 ~]# kubectl scale deployment nginx-deployment --replicas 5  #对应用的副本数进行扩容,直接指定副本数为5 deployment.extensions "nginx-deployment" scaled [root@linux-node1 ~]# kubectl get pod  #查看pod状态,可以看到已经增加到5个副本 NAME READY STATUS RESTARTS AGE net-test-5767cb94df-djt98 1/1 Running 0 38m net-test-5767cb94df-hcwv7 1/1 Unknown 0 50m net-test-5767cb94df-zb8m4 1/1 Running 0 50m nginx-deployment-6c45fc49cb-b9h84 1/1 Running 0 6m nginx-deployment-6c45fc49cb-g4mrg 1/1 Running 0 7m nginx-deployment-6c45fc49cb-k29kq 1/1 Running 0 6m nginx-deployment-6c45fc49cb-n9qkx 1/1 Running 0 24s nginx-deployment-6c45fc49cb-xpx9s 1/1 Running 0 24s
##扩容与减容

  #kubectl get deployment ##获取deployment名称
  #kubectl scale deployment nginx-deployment --replicas=3 扩容到3个
  #kubectl scale deployment nginx-deployment --replicas=1 恢复成1个

##动态处理CPU资源

#kubectl autoscale deployment nginx-deployment --min=2 --max=10 --cpu-percent=80

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM