Kubernetes之Deployment控制器

  Pod与controllers的关系

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

 

   Deployment功能与应用场景

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

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

  yaml字段解析 

  模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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的文件

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

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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: {}

  重定向到一个文件

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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: {}

  执行

1
kubectl apply -f web.yaml

  查看

1
kubectl get pods

 

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

1
kubectl logs web-867dd4dcf-fsgq8

 

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

  service和ingress两种方法暴露

  查看部署deploy

1
kubectl get deploy

 

   应用发布

1
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使用以下命令

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

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

1
kubectl get service

 

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

posted @   minseo  阅读(726)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2017-12-25 Python全栈day10(基础知识练习题)
点击右上角即可分享
微信分享提示