CentOSのベースイメージだけのポッドを作ってminikubeで動かしてみたら、ちょっとはまった


CentOSのベースイメージだけのポッドを作ってminikubeで動かしてみたら、ちょっとはまったので。

Dockerfile作成

ベースイメージだけをDockerfileに記述します。

# CentOS7 base image
FROM centos:7

Dockerイメージの作成

PS > docker build -t prj-bash:1 -f ./prj-bash.df .

Deploymentの作成

prj-bash
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prj-bash
spec:
  replicas: 1
  selector:
    matchLabels:
      run: prj-bash
  template:
    metadata:
      labels:
        run: prj-bash
    spec:
      containers:
        - name: prj-bash
          image: 'prj-bash:1'
          command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]

commandの部分が大事。これがないと、コンテナを起動したときに、「Warning BackOff kubelet, minikube Back-off restarting failed container」となる。且つ、ポッドの中に入れない。

なぜか?下記URLが参考となりました。
https://serverfault.com/questions/924243/back-off-restarting-failed-container-error-syncing-pod-in-minikube

原因は、起動してすぐに終了してしまったため。なので、ポッドにも入れないです。
対処としては、ずーっと常駐して動いているものが有ればよいです。

当然と言えば当然かも。サービスをこれから公開するのだから、常駐しているプロセスが必要ということ。
そこで、yamlのcommandにずっと動き続けるプロセス(tail -f /dev/null)を入れてあげています。

minikubeを起動

PS > minikube start

dashboardを起動

PS > minikube dashboard

containerを作成(起動)

PS > kubectl create -f prj-bash.yaml

podの状態を確認

PS > kubectl get pods                                                                        NAME                       READY   STATUS    RESTARTS   AGE
prj-bash-68587f695-rtm6c   1/1     Running   0          65s

podの中に入る

PS > kubectl exec -it prj-bash-68587f695-rtm6c /bin/bash
[root@prj-bash-68587f695-rtm6c /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

[root@prj-bash-68587f695-rtm6c /]#

Deploymentの削除

kubectl delete deployment prj-bash

minikubeの停止

minikube stop