2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenShiftAdvent Calendar 2022

Day 8

Podman Desktop でコンテナからの Pod の作成、Kubernetes YAML の生成を試す

Posted at

はじめに

KubeCon North America 2022 で Podman コミュニティから発表された Podman Desktop を触ってみます。特に、コンテナからの Pod の作成と、Pod からの Kubernetes YAML の生成を試してみます。

環境

  • Fedora Linux 37 (Fedora Workstation)
  • Podman 4.3.1
  • Podman Desktop 0.10.0

インストール

ドキュメントの Linux 環境向けインストールのページの手順に沿って行います。ドキュメントでは flatpak install コマンドに --user オプションをつけたユーザー単位でのインストール方法が案内されていますが、そのためには事前に --user オプションつきで flathub 用のリポジトリ設定を行っておく必要がありました。

$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo --user
$ flatpak install --user flathub io.podman_desktop.PodmanDesktop

インストール完了後、以下のコマンドで Podman Desktop が起動します。

$ flatpak run io.podman_desktop.PodmanDesktop

コマンドを使わなくても GNOME の Overview 画面からも起動できます。

Screenshot from 2022-12-08 21-46-05.png

起動直後の画面はこちら。
Screenshot from 2022-12-08 22-41-09.png

なお MacOSWindows へのインストールにも対応しています。

コンテナから Pod を作り Kubernetes YAML を生成するまで

コンテナイメージの Pull

左側の Images タブをクリックし、右上の Pull Images をクリックします。
Screenshot from 2022-12-08 22-44-23.png

次に Image to Pull: のボックスに Pull したいイメージ名を入力し、Pull image ボタンをクリックします。今回は mysql と入力します。
Screenshot from 2022-12-08 22-48-35.png
Screenshot from 2022-12-08 22-49-18.png

docker.io/library/mysql イメージが Pull されました。同じ要領で wordpress イメージも Pull します。
Screenshot from 2022-12-08 22-52-43.png

コンテナの実行

Pull したイメージを使ってコンテナを実行します。Images タブの各イメージの右側にある Run Image ボタン (再生ボタン) を押すと、コンテナ名やボリューム、環境変数その他の入力画面が表示されます。必要な項目を入力し Start Container をクリックするとコンテナが実行されます。
Screenshot from 2022-12-08 23-00-21.png

Screenshot from 2022-12-08 23-05-02.png

Containers タブからコンテナを選択するとコンテナログや podman inspect の実行結果も表示できます。
Screenshot from 2022-12-08 23-08-39.png
Screenshot from 2022-12-08 23-08-45.png

同じ要領で wordpress コンテナも実行します。

Pod の作成

Container タブに実行中のコンテナ 2 つが表示されていますが、各コンテナのチェックボックスをクリックし、右上にある Pod のアイコン (マウスオーバーすると "Create Pod with 2 selected items" と表示される) をクリックします。
Screenshot from 2022-12-08 23-12-01.png

Pod の名前を入力し、"Create Pod using these containers" ボタンを押すと Pod が作成されます。
Screenshot from 2022-12-08 23-15-37.png
Screenshot from 2022-12-08 23-16-41.png

ブラウザで localhost:9000 にアクセスすると WordPress の設定画面が表示されます。

Screenshot from 2022-12-08 23-22-36.png

Pod の Kubernetes YAML を生成

Pods タブから今作成された Pod をクリックし、Kube タブ、もしくは右上にある Generate Kube ボタンをクリックします。するとこの Pod に対応する Kubernetes YAML が表示されます。
Screenshot from 2022-12-08 23-42-09.png

実際に生成された YAML は以下の通りです。

# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-4.3.1
apiVersion: v1
kind: Pod
metadata:
  annotations:
    io.kubernetes.cri-o.ContainerType/mysql-container-podified: container
    io.kubernetes.cri-o.ContainerType/wordpress-container-podified: container
    io.kubernetes.cri-o.SandboxID/mysql-container-podified: c38189996702110cc0e6da403062d3d3c1dce5e46221057f8c6ddd4efc70677
    io.kubernetes.cri-o.SandboxID/wordpress-container-podified: c38189996702110cc0e6da403062d3d3c1dce5e46221057f8c6ddd4efc70677
    io.podman.annotations.autoremove/mysql-container-podified: "FALSE"
    io.podman.annotations.autoremove/wordpress-container-podified: "FALSE"
    io.podman.annotations.init/mysql-container-podified: "FALSE"
    io.podman.annotations.init/wordpress-container-podified: "FALSE"
    io.podman.annotations.privileged/mysql-container-podified: "FALSE"
    io.podman.annotations.privileged/wordpress-container-podified: "FALSE"
    io.podman.annotations.publish-all/mysql-container-podified: "FALSE"
    io.podman.annotations.publish-all/wordpress-container-podified: "FALSE"
  creationTimestamp: "2022-12-08T14:26:48Z"
  labels:
    app: mysql-wordpress-pod
  name: mysql-wordpress-pod
spec:
  automountServiceAccountToken: false
  containers:
  - args:
    - mysqld
    env:
    - name: MYSQL_USER
      value: exampleuser
    - name: MYSQL_RANDOM_ROOT_PASSWORD
      value: '''1'''
    - name: HOME
      value: /root
    - name: HOSTNAME
      value: 829c64a14561
    - name: MYSQL_DATABASE
      value: exampledb
    - name: MYSQL_PASSWORD
      value: examplepass
    image: docker.io/library/mysql:latest
    name: mysql-container-podified
    ports:
    - containerPort: 3306
      hostPort: 3306
    - containerPort: 80
      hostPort: 9000
    - containerPort: 33060
      hostPort: 33060
    resources: {}
    securityContext:
      capabilities:
        drop:
        - CAP_MKNOD
        - CAP_NET_RAW
        - CAP_AUDIT_WRITE
    volumeMounts:
    - mountPath: /var/lib/mysql
      name: 3cf903440ea40d4516d1651d8af435d9fce7c86a0008ab7d2d5ae4750cd0b92c-pvc
  - args:
    - apache2-foreground
    env:
    - name: WORDPRESS_DB_NAME
      value: exampledb
    - name: WORDPRESS_DB_HOST
      value: 127.0.0.1
    - name: HOSTNAME
      value: ff27ed15ba9b
    - name: WORDPRESS_DB_USER
      value: exampleuser
    - name: WORDPRESS_DB_PASSWORD
      value: examplepass
    - name: PHP_CPPFLAGS
      value: -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS
    - name: PHP_CFLAGS
      value: -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS
    - name: HOME
      value: /root
    image: docker.io/library/wordpress:latest
    name: wordpress-container-podified
    resources: {}
    securityContext:
      capabilities:
        drop:
        - CAP_MKNOD
        - CAP_NET_RAW
        - CAP_AUDIT_WRITE
    volumeMounts:
    - mountPath: /var/www/html
      name: 44ebd9696e9c7635c9e1c8992e9397b64ddbebaa46c277ab43013cf54f86e4e0-pvc
  enableServiceLinks: false
  hostname: mysql-wordpress-pod
  restartPolicy: Never
  volumes:
  - name: 3cf903440ea40d4516d1651d8af435d9fce7c86a0008ab7d2d5ae4750cd0b92c-pvc
    persistentVolumeClaim:
      claimName: 3cf903440ea40d4516d1651d8af435d9fce7c86a0008ab7d2d5ae4750cd0b92c
  - name: 44ebd9696e9c7635c9e1c8992e9397b64ddbebaa46c277ab43013cf54f86e4e0-pvc
    persistentVolumeClaim:
      claimName: 44ebd9696e9c7635c9e1c8992e9397b64ddbebaa46c277ab43013cf54f86e4e0
status: {}

また、今回は試せませんでしたが、Deploy to Kubernetes ボタン(ロケットアイコン) から Kubernetes へのデプロイを行うこともできるようです。

さいごに

Podman Desktop を使って、コンテナイメージの pull、コンテナの実行、コンテナからの Pod の作成、Kubernetes YAML の生成までの流れを見てきました。本当は OpenShift へのデプロイまでを試したかったのですがそこまで到達できず、結果的に OpenShift と全く関係のない記事になってしまいました。(いいのかそれ...?)

Podman Desktop は GitHub 上で開発が行われており、今後のプランロードマップも公開されています。Issues からバグ報告や機能改善リクエストをあげることができ、Discussions で質問もできます。現時点でバージョンは 0.10.0 で伸びしろの大きいプロジェクトです。ローカルマシン上でコンテナや Pod を動かしたい人は試してみてはいかがでしょうか。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?