Deployment

Deployment 控制Pod,使Pod拥有多副本,自愈,扩缩容等能力

kubectl run mynginx --image=nginx
kubectl create deployment mytomcat --image=tomcat:8.5.68

#等待pod运行
kubectl get pods -w

#直接删除pod
kubectl delete pod mynginx

#删除pod后,会自动再启动一个pod(自愈能力)
kubectl delete pod mytomcat-6f5f895f4f-5rbj6

#自动启动了一个mytomcat的容器
kubectl get pods -w

kubectl get deploy
kubectl delete deploy mytomcat

#如果有pod节点的服务器停机,5分钟后会检测出服务器的状态,在其它服务器上部署启动pod

Pod多副本

#参数replicas指定Pod副本的个数
kubectl create deployment my-dep --image=nginx --replicas=3

kubectl get pods -w

对应yaml格式的配置文件内容是

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-dep
  template:
    metadata:
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx

Pod扩缩容

#scale重新设定副本的个数
kubectl scale --replicas=5 deployment/my-dep

#或者也可以修改replicas的值
kubectl edit deployment my-dep

#-w同步阻塞监听事件变化
kubectl get pod -w 

#查看pod的ip地址及在那个服务器上
kubectl get pods -owide

kubectl get deploy my-dep -oyaml

Pod滚动更新

#滚动更新,参数record纪录变更的原因
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
kubectl get pods -owide -w

#查看正在滚动升级的状态
kubectl rollout status deployment/my-dep

#查看历史记录
kubectl rollout history deployment/my-dep

#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2

#回滚(回到上次)
kubectl rollout undo deployment/my-dep

#回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2

#查看使用的镜像版本
kubectl get deploy/my-dep -oyaml|grep image

Service

Service: Pod的服务发现与负载均衡

#暴露Deploy,对外端口8000,容器内部的端口80
kubectl expose deployment my-dep --port=8000 --target-port=80

#service有一个固定的ip,对外提供负载均衡
kubectl get service

#查看my-dep的CLUSTER-IP,在3台机器上都可以访问到
curl 10.96.104.11:8000

#service的ip地址只能内网访问。其它pod访问service可以使用服务域名的方式
#服务域名格式:服务名.所在名称空间.svc:端口
#如 curl my-dep.default.svc:8000,这种方式只在容器内部使用

kubectl get pods
kubectl exec -it my-dep-5b7868d854-j94dd -- /bin/bash
curl my-dep.default.svc:8000
exit

kubectl get pod --show-labels

kubectl delete service my-dep
kubectl get svc
kubectl get deploy

使用配置文件创建Service

vi my-dep-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  selector:
    app: my-dep
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80
kubectl apply -f my-dep-service.yaml
kubectl get svc
kubectl delete -f my-dep-service.yaml

Service暴露外网访问的端口

ClusterIP:集群ip,暴露的端口只能在集群内访问

# 没有设置type时,默认值是ClusterIP
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=ClusterIP

kubectl delete service my-dep

#NodePort 集群外也可以访问
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=NodePort

#查看my-dep的PORT(S) 如 8000:30688/TCP,在windows浏览器中访问 http://192.168.99.200:30688
#会在所有的机器开放30688端口,使用外网ip加端口,每个节点外网都能够访问到
kubectl get svc

NodePort范围在 30000-32767 之间

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐