为了验证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"]