为了验证Ansible AWX,部署在Kubernetes上的CentOS7上需要运行systemd和sshd

以下是概要的原始文本,请用中文进行改写:

总结

我需要一个用于 Ansible AWX 的测试主机,想要一个 CentOS7。
如果有满足以下条件的 CentOS7 的 Docker 镜像,并且有在 Kubernetes 上运行它的知识,那就太好了。

    • systemd が動作すること

 

    • sshd が動作すること

 

    yum install ができること

总结

没有那样的东西。
只能亲手创造。

执行环境

# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698aa92f0b1", GitTreeState:"clean", BuildDate:"2019-02-28T13:35:32Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}

假设/假定

    • kubernetes 構築済み

 

    • ⇒ ベアメタル3台構成

 

    • Service で type: LoadBalancer が利用できるように metallb を設定済

 

    • LoadBalancerIP に ping が飛ぶようにルーティングはばっちり

 

    • ⇒ それぞれの CentOS7 が別々の IP Address を持つようにするため

 

    • Docker image は自作

 

    • ⇒ 以下にアップしています。

 

    •   https://cloud.docker.com/repository/docker/solaris64sparc/centos7

 

    残念セキュリティなので注意が必要

如果要在Docker上运行,应该如何操作?

# docker run --privileged --name centos7no1 -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 2222:22 -d solaris64sparc/centos7:systemd-sshd

操作步骤

创建一个Namespace

# kubectl create ns awx-target

创建部署


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.17.0 (a74acad)
  creationTimestamp: null
  labels:
    io.kompose.service: centos7no1
  name: centos7no1
  namespace: awx-target
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: centos7no1
    spec:
      containers:
      - image: solaris64sparc/centos7:systemd-sshd
        name: centos7no1
        ports:
        - containerPort: 22
        resources: {}
        securityContext:
          privileged: true ★ docker run --privileged に相当
        volumeMounts:
        - name: cgroup
          mountPath: /sys/fs/cgroup ★ -v /sys/fs/cgroup:/sys/fs/cgroup:ro に相当
          readOnly: true
      restartPolicy: Always
      volumes:
         - name: cgroup
           hostPath:
             path: /sys/fs/cgroup
             type: Directory

创建服务


apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.17.0 (a74acad)
  creationTimestamp: null
  labels:
    io.kompose.service: centos7no1
  name: centos7no1
  namespace: awx-target
spec:
  type: LoadBalancer
  loadBalancerIP: 172.16.13.201 ★ IP Address を固定する
  ports:
  - name: "22"
    port: 22
    targetPort: 22
  selector:
    io.kompose.service: centos7no1

部署

# ls centos7no1
centos7no1-deployment.yaml  centos7no1-service.yaml

# kubectl create -f centos7no1
deployment.extensions/centos7no1 created
service/centos7no1 created

确认行动

我会通过ssh登录172.16.13.201来确认登录是否成功。登录用户如下所示。

ユーザパスワードrootP@ssw0rd!userP@ssword!

使用方法

尝试将playbook指定为Ansible AWX主机的目标,或者通过ssh登录并进行设置更改。执行重新启动将使其重新初始化,非常方便。

可以查阅Dockerfile。

FROM centos:7
# change root password
RUN echo 'root:P@ssw0rd!' | chpasswd

# create new user
RUN useradd user
RUN echo 'user:P@ssw0rd!' | chpasswd
RUN echo 'user          ALL=(ALL)       ALL' >> /etc/sudoers

# yum update, install openssh-server and other
RUN yum -y update; yum clean all
RUN yum -y install openssh-server passwd sudo; yum clean all
RUN mkdir /var/run/sshd

# ssh-keygen
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''

EXPOSE 22

ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]

RUN systemctl enable sshd

CMD ["/usr/sbin/init"]
广告
将在 10 秒后关闭
bannerAds