前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用YAML部署容器

使用YAML部署容器

作者头像
sparkle123
发布2021-02-05 14:34:19
9650
发布2021-02-05 14:34:19
举报

在这个场景中,学习如何使用Kubectl创建和启动部署、复制控制器,并通过编写yaml定义通过服务公开它们。YAML定义定义了调度部署的Kubernetes对象。可以更新对象并将其重新部署到集群中以更改配置。

Step 1 - Create Deployment

最常见的Kubernetes对象之一是部署对象。部署对象定义了所需的容器规范,以及Kubernetes的其他部分用于发现和连接应用程序的名称和标签。

将下列定义复制到编辑器中。该定义定义了如何使用运行在端口80上的Docker映像katacoda/ Docker -http-server启动名为webapp1的应用程序。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp1
  template:
    metadata:
      labels:
        app: webapp1
    spec:
      containers:
      - name: webapp1
        image: katacoda/docker-http-server:latest
        ports:
        - containerPort: 80

通过命令部署到集群

代码语言:javascript
复制
$ kubectl create -f deployment.yaml 
deployment.apps/webapp1 created

由于它是一个部署对象,因此可以通过以下方式获取所有部署对象的列表

代码语言:javascript
复制
$ kubectl get deployment
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
webapp1   1/1     1            1           64s

kubectl describe deployment webapp1可以输出单个部署的详细信息

代码语言:javascript
复制
$ kubectl describe deployment webapp1
Name:                   webapp1
Namespace:              default
CreationTimestamp:      Wed, 03 Feb 2021 15:00:24 +0000
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=webapp1
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=webapp1
  Containers:
   webapp1:
    Image:        katacoda/docker-http-server:latest
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   webapp1-6b54fb89d9 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  90s   deployment-controller  Scaled up replica set webapp1-6b54fb89d9 to 1

Step 2 - Create Service

Kubernetes具有强大的网络功能,可以控制应用程序的通信方式。这些网络配置也可以通过YAML来控制。 将服务定义复制到编辑器。该服务选择标签为webapp1的所有应用程序。当部署多个副本或实例时,它们将基于这个公共标签自动负载平衡。该服务通过NodePort使应用程序可用。

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: webapp1-svc
  labels:
    app: webapp1
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30080
  selector:
    app: webapp1

使用kubectl以一致的方式部署所有Kubernetes对象。

代码语言:javascript
复制
$ kubectl create -f service.yaml
service/webapp1-svc created

与前面一样,使用kubectl get svc部署的所有服务对象的详细信息。

代码语言:javascript
复制
$ kubectl get svc
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        7m52s
webapp1-svc   NodePort    10.100.198.79   <none>        80:30080/TCP   118s

通过kubectl descibe svc webapp1-svc获取配置的更多细节。

代码语言:javascript
复制
$ kubectl describe svc webapp1-svc
Name:                     webapp1-svc
Namespace:                default
Labels:                   app=webapp1
Annotations:              <none>
Selector:                 app=webapp1
Type:                     NodePort
IP:                       10.100.198.79
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30080/TCP
Endpoints:                172.18.0.4:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Step 3 - Scale Deployment

可以根据部署所需的不同配置更改YAML的详细信息。这遵循了作为代码思维的基础架构。清单应该保持在源代码控制之下,并用于确保生产中的配置与源代码控制中的配置匹配。

更新部署。yaml文件,以增加运行的实例数量。例如,文件应该是这样的: replicas: 4

使用kubectl apply对现有定义进行更新。要扩展副本的数量,请使用以下命令部署更新的YAML文件

代码语言:javascript
复制
kubectl apply -f deployment.yaml

立刻,我们想要的集群状态就被更新了,可以用 kubectl get deployment

额外的Pods将被安排以配合要求。kubectl get pod因为所有的pod都有相同的标签选择器,它们将在部署的服务NodePort后进行负载平衡。向端口发出请求将导致不同的容器处理curl host01:30080请求。

Kubernetes的网络细节和对象定义将在后面介绍。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Step 1 - Create Deployment
  • Step 2 - Create Service
  • Step 3 - Scale Deployment
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档