容器服务Docker&Kubernetes 关注
手机版

简化 Kubernetes Yaml 文件创建

  1. 云栖社区>
  2. 容器服务Docker&Kubernetes>
  3. 博客>
  4. 正文

简化 Kubernetes Yaml 文件创建

易立 2018-01-10 09:28:24 浏览4751 评论0

摘要: 如果需要自动化处理复杂的Kubernetes任务,常常需要编写Yaml配置文件。由于Yaml文件格式比较复杂,即使是老手有时也不免会犯错或需要查询文档,也有人开玩笑这是使用 Yaml 编程。我们今天将介绍几个方法来帮助大家来简化 Kubernetes Yaml 文件创建。

image
Kubernetes 提供了丰富的 kubectl 命令,可以较为方便地处理常见任务。如果需要自动化处理复杂的Kubernetes任务,常常需要编写Yaml配置文件。由于Yaml文件格式比较复杂,即使是老司机有时也不免会犯错或需要查询文档,也有人开玩笑这是使用 Yaml 编程。我们今天将介绍几个方法来帮助大家来简化 Kubernetes Yaml 文件创建。

模拟命令执行

kubectl中很多命令支持 --dry-run-o yaml 参数,可以方便地模拟命令执行,并输出yaml格式的命令请求,这样我们就可以将执行结果 Copy & Paste到自己的编辑器中,修改完成自己的配置文件。

$ kubectl run myapp --image=nginx --dry-run -o yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: myapp
  name: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      run: myapp
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: myapp
    spec:
      containers:
      - image: nginx
        name: myapp
        resources: {}
status: {}
$ kubectl create secret generic mysecret --from-literal=quiet-phrase="Shh! Dont' tell" -o yaml --dry-run
apiVersion: v1
data:
  quiet-phrase: U2hoISBEb250JyB0ZWxs
kind: Secret
metadata:
  creationTimestamp: null
  name: mysecret

导出资源描述

kubectl get <resource-type> <resource> --export -o yaml 命令会以Yaml格式导出系统中已有资源描述

比如,我们可以将系统中 mysql 部署的描述导成 Yaml 文件

$ kubectl get deployment mysql --export -o yaml > mysql.yaml 

Kompose转换

Docker Compose是最为流行的容器编排开发工具,可以方便地在Docker/Docker Swarm环境下开发、部署容器编排模板。

Kompose是Kubernetes社区开发的一个转换工具,可以方便地将简单的Docker Compose模板转化成为Kubernetes的Yaml描述文件,并在Kubernetes集群上部署和管理应用

我们可以通过 https://github.com/kubernetes/kompose 获取最新的kompose 工具

如下 docker-compose.yaml 模板描述了一个 WordPress 编排,其中包含两个服务,wordpress服务和mysql服务,为了将 wordpress服务暴露给外部访问,我们增加了一个 Kompose 特有的标签 kompose.service.type: nodeport,将服务以NodePort方式提供对外访问方式。

version: '2'
services:
  wordpress:
    image: wordpress:4
    environment:
      - WORDPRESS_DB_PASSWORD=password
    ports:
      - 80:80
    depends_on:
      - mysql
    labels: 
      kompose.service.type: nodeport
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=password

我们可以通过kompose convert命令转换为 Kubernetes 的 Deployment和Service的资源描述,

$ kompose convert
WARN Unsupported depends_on key - ignoring        
INFO Kubernetes file "mysql-service.yaml" created 
INFO Kubernetes file "wordpress-service.yaml" created 
INFO Kubernetes file "mysql-deployment.yaml" created 
INFO Kubernetes file "wordpress-deployment.yaml" created 

也可以通过kompose convert --stdout命令输出到标准输出

总结

Kubernetes以其开放的平台和活跃的社区征服了众多用户,然而其陡峭的学习曲线也让初学者望而生畏。今天希望通过几个技巧帮助大家简化 Kubernetes Yaml 文件的编写。

阿里云Kubernetes服务全球首批通过Kubernetes一致性认证,简化了Kubernetes集群生命周期管理,内置了与阿里云产品集成,也将进一步简化Kubernetes的开发者体验,帮助用户关注云端应用价值创新。

用云栖社区APP,舒服~

【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。  详情请点击

网友评论

易立
文章47篇 | 关注1646
关注
提供了高性能可伸缩的容器应用管理服务,支持在一组云服务器上通过Docker容器来进行应用生命... 查看详情
面向阿里云ECS实例、HPC和Docker的文件存储服务。 查看详情
是一款提供了现场可编程门阵列(FPGA)的计算实例,基于阿里云弹性计算框架,用户可以几分钟内... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
520表白

520表白