Kubernetes之Deployment控制器

  Pod与controllers的关系

  • controllers:在集群上管理和运行容器的对象
  • 通过label-selector相关联
  • Pod通过控制器实现应用的运维,如伸缩,滚动升级等

 

   Deployment功能与应用场景

  • 部署无状态应用
  • 管理Pod和ReplicaSet
  • 具有上线部署,副本设定,滚动升级,回滚等功能
  • 提供声明式更新,例如只更新一个新的Image

  应用场景:Web服务,微服务

  yaml字段解析 

  模板

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-depolyment
  namespace: default
spec:
  replicas: 3
  selector:
    matchLables:
      app: nginx
  template:
    metadate:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

  创建deployment的yaml的文件

kubectl create deployment web --image=nginx --dry-run -o yaml

  

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

  重定向到一个文件

kubectl create deployment web --image=nginx --dry-run -o yaml >web.yaml

  修改该yaml文档成测试的java-demo

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      containers:
      - image: lizhenliang/java-demo
        name: java
        resources: {}
status: {}

  执行

kubectl apply -f web.yaml

  查看

kubectl get pods

 

   查看容器日志,显示端口已经启动

kubectl logs web-867dd4dcf-fsgq8

 

   部署完应用怎么让应用暴露外部访问

  service和ingress两种方法暴露

  查看部署deploy

kubectl get deploy

 

   应用发布

kubectl expose --name=web deployment web --port=80 --target-port=8080 --type=NodePort

  指定资源的类型是deployment

  指定资源的名称是web  

  指定service作为这一组的访问入口,负载均衡到后端的端口 指定为80

  --target-port指定后端tomcat的端口

  --name指定service的名称,如果不指定和deployment的名称是一样的

  --type指定service的类型为NodePort分配一个随机的端口

  想要产生一个yaml使用以下命令

kubectl expose --name=web deployment web --port=80 --target-port=8080 --type=NodePort --dry-run -o yaml

  

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: web
  type: NodePort
status:
  loadBalancer: {}

  查看创建的service

kubectl get service

 

   使用node的ip加端口号可以访问

posted @ 2019-12-25 12:34  minseo  阅读(723)  评论(0编辑  收藏  举报