Правильный dockerfile для ansible, который работает на кластере k8s - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть кластер aks, и я создаю pod для ansible из базового c образа, например nginx, и устанавливаю все из оболочки вручную с помощью команд оболочки (pip3 install ansible, pip3 install openshift). Теперь мне нужно создать образ ansible с необходимыми обновлениями, вот мой dockerfile. Он отлично работает на ноутбуке, но когда я делаю репо и создаю ошибку, он возвращается. Может быть, кто-то поможет мне понять, как я могу развернуть правильный образ для ansible. Спасибо

Dockerfile:

FROM ubuntu:16.04. 

RUN apt-get update && apt-get install -y --no-install-recommends \
python3.5 \
python3-pip \
python3-setuptools \
curl \
sudo \
nano \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN pip3 install --upgrade pip
RUN pip3 install ansible
RUN pip3 install openshift
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s 
https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
RUN chmod +x ./kubectl
RUN sudo mv ./kubectl /usr/local/bin/kubectl
# Define working directory.
WORKDIR /data

# Define default command.
CMD ["bash"]

и вот ansible_pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: ansible
spec:
  volumes:
    - name: ansible-data
      persistentVolumeClaim:
        claimName: ansible-data
  containers:
    - name: ansible
      image: ansible:latest
      volumeMounts:
        - mountPath: /scripts
          name: ansible-data
      restartPolicy: Never

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ansible-data
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
     storage: 1Gi

1 Ответ

1 голос
/ 22 апреля 2020

создайте ошибку pod it backoff.

Это потому, что у вас есть CMD как bash, но (a) bash ожидает возможности чтения с stdin если не предоставлена ​​команда, и ваш PodSpec разрешает это (b), даже если это так, что вы ожидаете от контейнера do ? Просто сидите там, пока кто-нибудь не запустит kubectl exec, чтобы выполнить произвольные ansible команды playbook?

Я бы предположил, что кратчайший путь к ошибке, не связанной с откатом, - попросить ваш уже созданный образ docker просто спать бесконечно, пока кто-нибудь не сделает kubectl exec в капсулу, и / или вы не придумали то, что ожидаете от капсулы, do

  containers:
    - name: ansible
      image: ansible:latest
      command: ["sleep", "infinity"]

Пока это не так что вы спросили, вы, похоже, тратите много энергии для установки python в общий c образ, вместо использования docker.io/library/python:3.5 образа , который поставляется с python уже установленным и просто нужен остаток этих двоичных файлов, положенных поверх него

...