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加端口号可以访问