K8S 实用工具之五-kompose

k8s,实用工具,kompose · 浏览次数 : 308

小编点评

**K8S 实用工具之四 - kubectl实用插件** **引言** K8S 实用工具之四, kubectl 实用插件,简称 k8sctl,是 Kubernetes 集群管理工具中的核心工具之一。它可以用于管理和监控 Kubernetes 容器,并执行各种操作。 **简介** k8sctl 是一个命令行工具,用于与 Kubernetes 集群进行交互。它提供了许多命令和选项,可以用于: * 获取和设置容器信息 * 创建和删除容器 * 启动和停止容器 * 获取和设置 pod 信息 * 管理网络连接 * 创建和删除网络资源 * 等等 **安装** 可以使用以下方式安装 k8sctl: * **Linux**:使用 `wget` 获取并安装从 GitHub 上的压缩包。 * **macOS**:使用 `curl` 获取并安装从 GitHub 上的压缩包。 * **Windows**:使用 `wget` 或 `curl` 获取并安装从 GitHub 上的压缩包。 **用法** 以下是 k8sctl 的一些常用命令: * `kubectl get pods`:获取所有容器。 * `kubectl get nodes`:获取所有节点。 * `kubectl exec -it bash`:进入容器中。 * `kubectl port-forward :`:将容器的端口映射到主机上的端口。 * `kubectl describe pod `:获取一个容器的详细信息。 **示例** 以下命令展示如何使用 k8sctl 获取所有容器的信息: ``` kubectl get pods ``` **结论** k8sctl 是 K8S 集群管理工具中非常重要的工具。它可以帮助您轻松地管理和监控您的 Kubernetes 容器。

正文

开篇

📜 引言

  • 磨刀不误砍柴工
  • 工欲善其事必先利其器

Kubernetes + Compose = Kompose

从 Docker Compose 到 Kubernetes 的转换工具

什么是 Kompose?

Kompose 是 dockercompose 到 Kubernetes (或 OpenShift) 等容器编排器的转换工具。

为什么开发者喜欢它?

  • 使用 Docker Compose 简化开发过程,然后将容器部署到生产集群
  • 转换你的 docker-compose.yaml 需要一个简单的命令 kompose convert

易如反掌

  1. 找一个 docker-compose.yaml 文件;
  2. 执行:kompose convert
  3. 执行 kubectl apply 并检查您的 k8s 集群为您新部署的容器!
$ wget https://raw.githubusercontent.com/kubernetes/kompose/master/examples/docker-compose-v3.yaml -O docker-compose.yaml

$ kompose convert

$ kubectl apply -f .

$ kubectl get po
NAME                            READY     STATUS              RESTARTS   AGE
frontend-591253677-5t038        1/1       Running             0          10s
redis-master-2410703502-9hshf   1/1       Running             0          10s
redis-slave-4049176185-hr1lr    1/1       Running             0          10s

实战

比如我要在 K8S 上安装 RssHub,这是官方提供的 docker-compose.yml:

version: '3'
services:
    rsshub:
        image: diygod/rsshub
        restart: always
        ports:
            - '1200:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'
            PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
        depends_on:
            - redis
            - browserless
    browserless:
        # See issue 6680
        image: browserless/chrome:1.43-chrome-stable
        restart: always
        ulimits:
          core:
            hard: 0
            soft: 0
    redis:
        image: redis:alpine
        restart: always
        volumes:
            - redis-data:/data
volumes:
    redis-data:

执行 kompose convert 后,从 docker-compose.yml 生成以下文件:

$ ll
.rw-r--r--  711 casey  1 Dec 21:20 browserless-deployment.yaml
.rw-r--r--  715 casey  1 Dec 21:20 docker-compose.yml
.rw-r--r--  243 casey  1 Dec 21:20 redis-data-persistentvolumeclaim.yaml
.rw-r--r--  867 casey  1 Dec 21:20 redis-deployment.yaml
.rw-r--r-- 1.0k casey  1 Dec 21:20 rsshub-deployment.yaml
.rw-r--r--  352 casey  1 Dec 21:20 rsshub-service.yaml

每个 docker-compose 容器,会生成为一个 deployment,并为你自动转换好 label 和 env 等字段,以 rsshub-deployment.yaml 为例:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.26.0 (40646f47)
  creationTimestamp: null
  labels:
    io.kompose.service: rsshub
  name: rsshub
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: rsshub
  strategy: {}
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.26.0 (40646f47)
      creationTimestamp: null
      labels:
        io.kompose.service: rsshub
    spec:
      containers:
        - env:
            - name: CACHE_TYPE
              value: redis
            - name: NODE_ENV
              value: production
            - name: PUPPETEER_WS_ENDPOINT
              value: ws://browserless:3000
            - name: REDIS_URL
              value: redis://redis:6379/
          image: diygod/rsshub
          name: rsshub
          ports:
            - containerPort: 1200
          resources: {}
      restartPolicy: Always
status: {}

Docker compose 的 ports 部分,会转换为 SVC,以 rsshub-service.yaml 为例:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.26.0 (40646f47)
  creationTimestamp: null
  labels:
    io.kompose.service: rsshub
  name: rsshub
spec:
  ports:
    - name: "1200"
      port: 1200
      targetPort: 1200
  selector:
    io.kompose.service: rsshub
status:
  loadBalancer: {}

Docker compose 的 volumes 字段,会转换为 PVC,以 redis-data-persistentvolumeclaim.yaml 为例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: redis-data
  name: redis-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}

安逸!

安装

# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-linux-amd64 -o kompose

# macOS
curl -L https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-darwin-amd64 -o kompose

chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

That's All

🎉🎉🎉

参考链接

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

与K8S 实用工具之五-kompose相似的内容:

K8S 实用工具之五-kompose

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 第二篇:《K8S 实用工具之二 - 终端 UI K9S》 第三篇:《K8S 实用工具之三 - 图形化 UI Lens》 第四篇:《K8S 实用工具之四 - kubec

K8S 实用工具之四 - kubectl实用插件

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 第二篇:《K8S 实用工具之二 - 终端 UI K9S》 第三篇:《K8S 实用工具之三 - 图形化 UI Lens》 在《K8S 实用工具之一 - 如何合并多个 k

K8S 实用工具之六-kubectl-aliases

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 第二篇:《K8S 实用工具之二 - 终端 UI K9S》 第三篇:《K8S 实用工具之三 - 图形化 UI Lens》 第四篇:《K8S 实用工具之四 - kubec

K8S 实用工具之一 - 如何合并多个 kubeconfig?

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 K8S 集群规模,有的公司倾向于少量大规模 K8S 集群,也有的公司会倾向于大量小规模的 K8S 集群。 如果是第二种情况,是否有一个简单的 kubectl 命令来获取一个 kubeconfig 文件并将其合并到 ~/.kube/config

K8S 实用工具之二 - 终端 UI K9S

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 像我这种,kubectl 用的不是非常溜,经常会碰到以下情况: 忘记命令,先敲 --help,再敲命令,效率低 忘记加 -n 指定 namespace 太长的命令经常

K8S 实用工具之三 - 图形化 UI Lens

开篇 📜 引言: 磨刀不误砍柴工 工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 第二篇:《K8S 实用工具之二 - 终端 UI K9S》 像我这种,kubectl 用的不是非常溜,经常会碰到以下情况: 忘记命令,先敲 --help,再敲命令,效率

k8s集群搭建及对一些组件的简单理解(二)

背景 前面写了一篇,k8s集群搭建及对一些组件的简单理解(一),主要讲了下背景和对一些组件的理解。 今天讲一下正式的安装,有网环境的,后续再说下无外网环境纯内网的。 k8s集群节点、组件 控制面节点,一般就是部署了如下组件:etcd、apiserver、kube-scheduler、kube-con

k8s集群搭建及对一些组件的简单理解(一)

背景 k8s的学习环境(用kubeadm方式搭建),我也搭过几次了,但都有点问题。 要么在云服务器上弄,这个的问题是就只有一台轻量服务器,只能搭个单节点的;后来买了一台便宜的,所以就有了两台,但是不在一个zone,一个是广州,一个是成都,内网不通,感觉搭起来很麻烦,还没试过。 要么是在本机的虚拟机上

实战 k8s----初识

什么是k8s?k8s是谷歌开源的一套完整的容器管理平台,方便我们直接管理容器应用。谷歌称之为,kubernetes,[kubə’netis] ,(跟我一起读库波尔耐题思,重音在耐的音上),由于字母太多,我们简称为k8s,8代表k-->s之间的8个字母。kubernetes 译为舵手,标识是一个航海舵

k8s网络问题以及容器跨宿主机通信原理

【0】资源配置文件 [root@mcwk8s03 mcwtest]# ls mcwdeploy.yaml [root@mcwk8s03 mcwtest]# cat mcwdeploy.yaml apiVersion: apps/v1 kind: Deployment metadata: labels