首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用YAML部署容器

使用YAML部署容器

作者头像
sparkle123
发布于 2021-02-05 06:34:19
发布于 2021-02-05 06:34:19
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

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

Step 1 - Create Deployment

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
$ kubectl create -f deployment.yaml 
deployment.apps/webapp1 created

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get deployment
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
webapp1   1/1     1            1           64s

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
$ kubectl create -f service.yaml
service/webapp1-svc created

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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
代码运行次数:0
运行
AI代码解释
复制
$ 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
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f deployment.yaml

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

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
学习使用Kubectl部署Containers
如何使用Kubectl创建和启动部署、复制控制器,并通过服务公开它们,而不需要编写yaml定义。快速地将容器启动到集群中。
sparkle123
2021/02/05
7090
K8s上部署Go服务
通过Rancher一键部署k8s服务 地址: https://rancher.com/quick-start/ 命令 sudo docker run --privileged -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher 然后访问你的docker机器的IP地址就可以看到一个叫local的k8s环境,不过不知道是不是我操作不对,我不能使用这个集群 点击添加集群,自定义一通默认到最后给你一个docker命令执行后我们就又得到
conanma
2022/03/17
9120
Kubernetes之Pod, Replicaset, Deployment, Label, Service
Pod是一组紧密关联的容器集合,它们共享PID、IPC、Network和UTS namespace,是Kubernetes调度的基本单位。Pod的设计理念是支持多个容器在一个Pod中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务.
jwangkun
2021/12/23
3330
Kubernetes之Pod、 Replicaset、 Service、Deployment和Label
deploy控制RS,RS控制Pod,这一整套,向外提供稳定可靠的Service。
菲宇
2019/06/12
1.1K0
Kubernetes之Pod、 Replicaset、 Service、Deployment和Label
用Kubernetes部署Springboot或Nginx,也就一个文件的事
1 前言 经过《Maven一键部署Springboot到Docker仓库,为自动化做准备》,Springboot的Docker镜像已经准备好,也能在Docker上成功运行了,是时候放上Kubernetes跑一跑了。这非常简单,一个yaml文件即可。 2 一键部署Springboot 2.1 准备yaml文件 当准备好镜像文件后,要部署到Kubernetes就非常容易了,只需要一个yaml格式的文件即可,这个文件能描述你所需要的组件,如Deployment、Service、Ingress等。定义如下: apiVersion: apps/v1 kind: Deployment metadata: name: pkslow-springboot-deployment spec: selector: matchLabels: app: springboot replicas: 2 template: metadata: labels: app: springboot spec: containers: - name: springboot image: pkslow/springboot-mongo:0.0.6 ports: - containerPort: 8080
崔笑颜
2020/07/09
8050
用Kubernetes部署Springboot或Nginx,也就一个文件的事
Helm
​在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理。
星哥玩云
2022/09/15
9880
Helm
kubernetes Service:让客户端发现pod并与之通信
service是k8s中的一个重要概念,主要是提供负载均衡和服务自动发现。 Service 是由 kube-proxy 组件,加上 iptables 来共同实现的。
没有故事的陈师傅
2020/06/09
3.2K0
kubernetes Service:让客户端发现pod并与之通信
容器 & 服务:K8s 与 Docker 应用集群 (四)
https://mp.weixin.qq.com/s/LbHI2tHi_eOkuSgSROh3ng
程序员架构进阶
2021/03/09
9070
容器 & 服务:K8s 与 Docker 应用集群 (四)
附020.Nginx-ingress部署及使用
[root@master01 ingress]# git clone https://github.com/nginxinc/kubernetes-ingress/
木二
2020/06/04
1.2K0
helm 构建 chart
如果我们想要在 Kubernetes 集群中部署两个副本的 Ghost,可以直接应用下面的资源清单文件即可:
看、未来
2022/05/20
2.2K0
helm 构建 chart
k8s 之yaml文件基本格式
注:yaml文件严格要求缩进,默认不同层次等级是两个空格的缩进 1、使用httpd镜像创建一个Deployment资源对象
小手冰凉
2020/08/28
1.3K0
kubernetes中常用的Ingress Controller
到https://github.com/kubernetes/ingress-nginx/tree/master/deploy/static这个下面下载对应的YAML文件,有configmap.yaml,namespace.yaml,rbac.yaml,with-rbac.yaml,可以写一个如下循环下载:
极客运维圈
2020/02/04
1.8K0
kubernetes中常用的Ingress Controller
service mesh框架对比_k8s外部访问内部service
在kubernetes中,Pod是应用程序的载体,我们可以通过Pod的IP来访问应用程序,但是Pod的IP地址不是固定的,这就意味着不方便直接采用Pod的IP对服务进行访问。
全栈程序员站长
2022/09/22
9760
service mesh框架对比_k8s外部访问内部service
kubernetes 上手指南:概念篇
今天的主题:kubernetes 概念篇,通过一些示例,学习 kubernetes(k8s) 的一些核心概念。
谢伟
2019/12/13
8180
自从上了K8S,项目更新都不带停机的!
ReplicaSet确保任何时间都有指定数量的Pod副本在运行。通常用来保证给定数量的、完全相同的Pod的可用性。建议使用Deployment来管理ReplicaSet,而不是直接使用ReplicaSet。
macrozheng
2021/02/05
1.8K0
自从上了K8S,项目更新都不带停机的!
不背锅运维:粗讲:K8S的Service及分享现撸案例
Kubernetes中的Service是一种网络抽象,用于将一组Pod暴露给其他组件,例如其他Pod或外部用户。Service可以作为一个负载均衡器,为一组Pod提供单一的IP地址和DNS名称,并通过选择器来将流量路由到这些Pod。
不背锅运维
2023/03/08
1.4K0
不背锅运维:粗讲:K8S的Service及分享现撸案例
Kubernete-Helm包管理工具
Helm是一个Kubernetes的包管理工具,就像Linux下的包管理工具,可以很方便的将之前打包好的yaml文件部署到Kubernetes上.
Yuou
2022/09/26
3640
【云原生 | Kubernetes篇】Kubernetes基础入门(三)
kubelet负责控制所有容器的启动停止,保证节点工作正常,已经帮助节点交互master
Lansonli
2022/06/06
1.9K0
【云原生 | Kubernetes篇】Kubernetes基础入门(三)
k8s的YAML与集群访问
查看服务详情 kubectl describe svc test-k8s ,可以发现 Endpoints 是各个 Pod 的 IP,也就是他会把流量转发到这些节点。
爽朗地狮子
2022/09/22
7340
Kubernetes入门实践--部署运行Go项目
前面的几篇文章从概念层面介绍了Kubernetes是什么,它的内部架构是怎样的。并且也在电脑上安装了Minikube--拥有一个单节点的Kubernetes集群,让我们能够在自己的电脑上开始体验Kubernetes。今天的文章我准备和大家一起一步步地尝试做一个Go应用程序的Docker镜像,把它部署到Minikuebe上运行。今天的文章不需要什么基础,Kubernetes的新手朋友们先一起上车学起来。
KevinYan
2020/07/03
7420
相关推荐
学习使用Kubectl部署Containers
更多 >
LV.0
富士通南大开发课长
交个朋友
加入云原生工作实战群
云原生落地实践 技术难题攻坚探讨
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
加入架构与运维工作实战群
高并发系统设计 运维自动化实践
换一批
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档