🔥

k8s(Kubernetes) マニフェスト作成が面倒!? そんな時は kubectl create コマンドを利用しよう!

2023/02/12に公開

はじめに

k8s マニフェストの作成が面倒だなと思っていたのですが、kubectl create をうまく使えば楽にマニフェストが作れたので、備忘録としてここに手順を記載します。

前提

下記を前提に手順を記載しています。

  • k8sについてある程度知っている
    • deployment, pod, cronjob, service とかがどういう役割をしているかわかる
      -  k8s マニフェストがなにかわかる
  • kubectlのversionは 1.15.0 以上とします

作り方

kubectl create ~ コマンドを実行して出力結果を ファイルにリダイレクトしてやればいいです。
具体的な方法は下記に記載します。
(※順次追加予定です)

k8s Deployment のマニフェスト

kubectl create deployment を利用するといいです。

kubectl create deployment [任意の名前] \
  --image=[コンテナが利用するイメージ] \
  -o [yaml or json] \
  --port=[コンテナが公開するport番号] \
  --dry-run=client \
  -- [Pod(コンテナ)起動時に実行するコマンド] > [マニフェストファイルの名前].[yaml or json]

例えば, k8s deploymentで nginxを 80番portで公開するマニフェスト

kubectl create deployment test \
  --image=nginx:alpine \
  -o yaml \
  --port=80 \
  --dry-run=client \
  -- nginx -g deamon
ファイルに直接記載したい場合は下記
kubectl create deployment test \
  --image=nginx:alpine \
  -o yaml \
  --port=80 \
  --dry-run=client \
  -- nginx -g deamon > test-nginx.yaml

teeコマンドを利用するとファイルへの書き込みと標準出力両方してくれます。

kubectl create deployment test \
  --image=nginx:alpine \
  -o yaml \
  --port=80 \
  --dry-run=client \
  -- nginx -g deamon | tee test-nginx.yaml

実行結果

manifest
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: test
  name: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - command:
        - nginx
        - -g
        - deamon
        image: nginx:alpine
        name: nginx
        ports:
        - containerPort: 80
        resources: {}
status: {}

k8s CronJob  のマニフェスト

kubectl create cronjob を利用するといいです。

kubectl create cronjob [任意の名前] \
  --image=[コンテナが利用するイメージ] \
  -o [yaml or json] \
  --schedule="[cronのスケジュール]" \
  --dry-run=client \
  -- [Pod(コンテナ)起動時に実行するコマンド] > [マニフェストファイルの名前].[yaml or json]

毎日 16:00 に busyboxのコンテナでdateコマンドを実行するマニフェスト

kubectl create cronjob cron-test \
  --image=busybox \
  -o yaml \
  --schedule="0 16 * * *" \
  --dry-run=client \
  -- date 
ファイルに直接記載したい場合は下記
kubectl create cronjob cron-test \
  --image=busybox \
  -o yaml \
  --schedule="0 16 * * *" \
  --dry-run=client \
  -- date > test-cronjob.yaml

teeコマンドを利用するとファイルへの書き込みと標準出力両方してくれます。

kubectl create cronjob cron-test \
  --image=busybox \
  -o yaml \
  --schedule="0 16 * * *" \
  --dry-run=client \
  -- date | tee test-cronjob.yaml

実行結果

manifest
piVersion: batch/v1
kind: CronJob
metadata:
  creationTimestamp: null
  name: cron-test
spec:
  jobTemplate:
    metadata:
      creationTimestamp: null
      name: cron-test
    spec:
      template:
        metadata:
          creationTimestamp: null
        spec:
          containers:
          - command:
            - date 
            image: busybox
            name: cron-test
            resources: {}
          restartPolicy: OnFailure
  schedule: 0 16 * * *
status: {}

参考

Discussion