_@ andersla ์์ 2016๋ 10์ 27์ผ 18:8_
๋ฒ๊ทธ ๋ณด๊ณ
Kubernetes ๋ฒ์ ( kubectl version
):
์ต์
ํ๊ฒฝ :
์ฐ๋ถํฌ 16.04 ๋์ปค ์ปจํ
์ด๋
๋ฌด์จ ์ผ์ด ์์๋์ง :
Ubuntu 16.04 ๋์ปค ์ปจํ
์ด๋ ๋ด๋ถ์ Kubeadm์ ์ค์นํ๋ ค๊ณ ํ๋ฉด ์คํจํฉ๋๋ค.
๋ด ์์ด๋์ด๋ ํ๋์ ๋์ปค ์ปจํ
์ด๋๋ฅผ ๋ง์คํฐ "๋
ธ๋"๋ก ์ฌ์ฉํ๊ณ ๋ ๋ฒ์งธ ์ปจํ
์ด๋๋ฅผ ์์
์ "๋
ธ๋"(๋์ปค์ kubernetes)๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์์ต๋๋ค.
์์คํ
๋ฌธ์ ์ธ๊ฐ์? (๋ต๋ณ์ "์ธํฐ๋ท ๊ฒ์"ํ ๋ ๋ฐ๊ฒฌํ ๊ฒ)
Ubuntu 16.04 docker ์ด๋ฏธ์ง ๋ด๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์นํฉ๋๋ค. apt-get install -y kubeadm
์ค์ ๋ก๊ทธ:
...
...
...
all: Setting up socat (1.7.3.1-1) ...
all: Setting up kubelet (1.4.3-00) ...
all: /var/lib/dpkg/info/kubelet.postinst: 38: /var/lib/dpkg/info/kubelet.postinst: [[: not found
all: Setting up kubectl (1.4.3-00) ...
all: Setting up kubeadm (1.5.0-alpha.0-1534-gcf7301f-00) ...
all: Failed to connect to bus: No such file or directory
**all: dpkg: error processing package kubeadm (--configure):**
all: subprocess installed post-installation script returned error exit status 1
all: Setting up netcat-traditional (1.10-41) ...
all: update-alternatives: using /bin/nc.traditional to provide /bin/nc (nc) in auto mode
all: Setting up netcat (1.10-41) ...
all: Setting up patch (2.7.5-1) ...
all: Setting up rename (0.20-4) ...
all: update-alternatives: using /usr/bin/file-rename to provide /usr/bin/rename (rename) in auto mode
all: Setting up tcpd (7.6.q-25) ...
all: Setting up ubuntu-fan (0.9.1) ...
all: invoke-rc.d: could not determine current runlevel
all: invoke-rc.d: policy-rc.d denied execution of start.
all: Setting up xz-utils (5.1.1alpha+20120614-2ubuntu2) ...
all: update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
all: Setting up python3 (3.5.1-3) ...
all: running python rtupdate hooks for python3.5...
all: running python post-rtupdate hooks for python3.5...
all: Setting up apparmor (2.10.95-0ubuntu2.2) ...
all: update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
all: Setting up dh-python (2.20151103ubuntu1.1) ...
all: Processing triggers for libc-bin (2.23-0ubuntu4) ...
all: Processing triggers for systemd (229-4ubuntu11) ...
all: Processing triggers for initramfs-tools (0.122ubuntu8.5) ...
all: Processing triggers for dbus (1.10.6-1ubuntu3) ...
all: Errors were encountered while processing:
all: kubeadm
all: E: Sub-process /usr/bin/dpkg returned an error code (1)
==> all: Killing the container: 93babb5045461c343a803109ba683a2acf68f1f453447a336b09171a1b190f38
Build 'all' errored: Script exited with non-zero exit status: 100
==> Some builds didn't complete successfully and had errors:
--> all: Script exited with non-zero exit status: 100
_์๋ณธ์์ ๋ณต์ฌ: kubernetes/kubernetes#35712_
_2016๋ 10์ 27์ผ 18์ 14 ๋ถ ์ @luxas์์
cc @errordeveloper ๋ฐ @marun ์ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์์คํ ์ ์คํํ๊ณ
@andersla ์ปจํ ์ด๋ ๋ด์์ ์ด๋ฐ ์์ผ๋ก systemd๋ฅผ ์คํํ๋ ๊ฒ์ ootb๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
_2016๋ 10์ 28์ผ 7:36 @zreigz ์์_
์ค๋ก๊ฐ ๋์ง ์๋๋ค๋ฉด ์ข ๋ ์์ธํ ์ดํด๋ณด๊ณ ์์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
_@ andersla ์์ 2016๋ 10์ 28์ผ 8:48_
@zreigz ํด์ฃผ์ธ์!
์ด๊ฒ์ด ๋ด๊ฐ ์ค์นํ๋ ค๊ณ ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
docker run -it --privileged ubuntu /bin/bash
๊ทธ๋ฆฌ๊ณ :
echo "Updating Ubuntu..."
apt-get update -y
apt-get upgrade -y
echo "Install os requirements"
apt-get install -y \
curl \
apt-transport-https \
dialog \
python \
daemon
echo "Add Kubernetes repo..."
sh -c 'curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -'
sh -c 'echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list'
apt-get update -y
echo "Installing Kubernetes requirements..."
apt-get install -y \
docker.io \
kubelet \
kubernetes-cni \
kubectl \
kubeadm
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ kubeadm์ ์ค์นํ ๋ ๋ฐ์ํ๋ ์ค๋ฅ์ ๋๋ค.
root<strong i="16">@82f5321d45cb</strong>:/# apt-get install kubeadm
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
kubeadm
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 7981 kB of archives.
After this operation, 59.2 MB of additional disk space will be used.
Get:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubeadm amd64 1.5.0-alpha.0-1534-gcf7301f-00 [7981 kB]
Fetched 7981 kB in 0s (8532 kB/s)
Selecting previously unselected package kubeadm.
(Reading database ... 14222 files and directories currently installed.)
Preparing to unpack .../kubeadm_1.5.0-alpha.0-1534-gcf7301f-00_amd64.deb ...
Unpacking kubeadm (1.5.0-alpha.0-1534-gcf7301f-00) ...
Setting up kubeadm (1.5.0-alpha.0-1534-gcf7301f-00) ...
Failed to connect to bus: No such file or directory
dpkg: error processing package kubeadm (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
kubeadm
E: Sub-process /usr/bin/dpkg returned an error code (1)
_2016๋ 10์ 28์ผ 9์ 10๋ถ @zreigz ์์_
๋๋ ๊ทธ๊ฒ์ ์ฌํํ๊ณ ๋๋ ์ด๊ฒ์ ์์ ํ๊ณ ์๋ค
_2016๋ 10์ 31์ผ 7:24 @zreigz ์์_
๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ: ll: /var/lib/dpkg/info/kubelet.postinst: 38: /var/lib/dpkg/info/kubelet.postinst: [[: not found
Ubuntu ์์คํ
์์ /bin/sh๋ bash๊ฐ ์๋๋ผ dash์ด๋ฉฐ dash๋ ์ด์ค ๊ดํธ ํค์๋๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์ข์ ์ ์ ๋ฌธ์ ๊ฐ ๋ง์คํฐ ๋ธ๋์น์์ ์์ ๋์์ผ๋ฉฐ ๊ณง ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค: https://github.com/kubernetes/release/blob/master/debian/xenial/kubelet/debian/postinst#L40
๋ ๋ฒ์งธ๋ ๊ทธ๋ ๊ฒ ์ฌ์ํ์ง ์์ต๋๋ค. ์ปจํ
์ด๋์์ systemctl์ ์คํํ๋ฉด Failed to get D-Bus connection
์คํจํฉ๋๋ค. systemd๊ฐ ์ปจํ
์ด๋์์ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด์ ๋๋ ์ด๊ฒ์ ์ํด ์ผํ๊ณ ์๋ค.
_2016๋ 10์ 31์ผ 7:42 @andersla ์์_
์์ฒญ๋!
kubeadm ์ค์น์ ์ systemd/systemctl์ด ํ์ํ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
_2016๋ 10์ 31์ผ 7:47 @zreigz ์์_
์ด ๋ ์ค ๋๋ฌธ์: https://github.com/kubernetes/release/blob/master/debian/xenial/kubeadm/debian/postinst#L25
systemctl daemon-reload
systemctl restart kubelet
์ฒซ ๋ฒ์งธ ์ค์์ ์คํจํฉ๋๋ค.
_2016๋ 10์ 31์ผ 7:48 @zreigz ์์_
์ด๊ฒ์ ์ค๋ช ์ ๋๋ค:
# because kubeadm package adds kubelet drop-ins, we must daemon-reload
# and restart kubelet now. restarting kubelet is ok because kubelet
# postinst configure step auto-starts it.
_2016๋ 10์ 31์ผ 7:52 @zreigz ์์_
์๋ํ๊ฒ ํ๋ ๋ช ๊ฐ์ง ๊ตฌ์ฑ ๋จ๊ณ๊ฐ ์์ง๋ง ๋จผ์ ์๋ํด์ผ ํฉ๋๋ค. ๋ญ๊ฐ ์ฐพ์ผ๋ฉด ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
_2016๋ 11์ 2์ผ 7:19 @zreigz ์์_
์ข์ ์์. ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๋ง์ง๋ง ํ ์คํธ๊ฐ ํ์ํ๋ฉฐ Docker ์ปจํ ์ด๋์์ kubeadm์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๊ฒ์ํ ๊ฒ์ ๋๋ค.
_@ andersla ์์ 2016๋ 11์ 2์ผ 7:23_
๊ฐ๋ ์! ํ ์คํธ๊ฐ ์ค๋น๋๋ ๋๋ก ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค! - ๋น๋ก ์ด๋ฒ ์ฃผ ๋๋จธ์ง๋ ๊ณตํด์ผ์ด์ง๋ง:)
_From @zreigz ๋ 11 ์ 2 ์ผ 2016 ๋ 10 : 13_
Docker ์ปจํ ์ด๋์ kubeadm์ ์ค์นํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ๋ ๊ฐ์ง ์ฃผ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์ปจํ ์ด๋์์ ์คํ๋๋ systemd์ ๋๋ค. ๋ ๋ฒ์งธ๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ๋์ปค๋ฅผ ์ค์นํ๋ ๊ฒ์ ๋๋ค. ๋ฌธ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์์ ๋์์ต๋๋ค. Ubuntu ์ด๋ฏธ์ง๋ฅผ ์ค๋นํ๋ ๋ฐ ์ฌ์ฉํด์ผ ํ๋ Dockerfile์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
FROM ubuntu
ENV container docker
RUN apt-get -y update
RUN apt-get update -qq && apt-get install -qqy \
apt-transport-https \
ca-certificates \
curl \
lxc \
vim \
iptables
RUN curl -sSL https://get.docker.com/ | sh
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
VOLUME /var/run/docker.sock
CMD /sbin/init
์ด ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Dockerfile์ด ํฌํจ๋ ๋๋ ํ ๋ฆฌ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค.
docker build -t kubeadm_docker .
์ด์ ์ค๋น๋ ์ด๋ฏธ์ง๋ฅผ ์คํํ๊ณ kubeadm ์ค์น๋ฅผ ๋ง์น ์ ์์ต๋๋ค.
๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ kubeadm_docker
์ด๋ฏธ์ง๋ฅผ ์คํํฉ๋๋ค.
docker run -it -e "container=docker" --privileged=true -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock kubeadm_docker /sbin/init
์คํ ์ค์ธ ์ปจํ ์ด๋ ID ์ฐพ๊ธฐ
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7dd73057620d kubeadm_docker "/sbin/init" About an hour ago Up About an hour furious_fermi
์ด์ ์ปจํ ์ด๋ ์ฝ์์ ์ด ์ ์์ต๋๋ค.
docker exec -it 7dd73057620d /bin/bash
์ด๊ฒ์ kubeadm์ ์ค์นํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ(์ฝ๊ฐ์ ์์ ํฌํจ)์ ๋๋ค.
echo "Updating Ubuntu..."
apt-get update -y
apt-get upgrade -y
systemctl start docker
echo "Install os requirements"
apt-get install -y \
curl \
apt-transport-https \
dialog \
python \
daemon
echo "Add Kubernetes repo..."
sh -c 'curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -'
sh -c 'echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list'
apt-get update -y
echo "Installing Kubernetes requirements..."
apt-get install -y \
kubelet
# This is temporary fix until new version will be released
sed -i 38,40d /var/lib/dpkg/info/kubelet.postinst
apt-get install -y \
kubernetes-cni \
kubectl \
kubeadm
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์คํํ ์ ์์ต๋๋ค
# kubeadm init
๋ชจ๋ ๊ฒ์ด ๋ก์ปฌ ์ปดํจํฐ์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค.
ํ์ด์ ๋น๋๋ค :)
_2016๋ 11์ 17์ผ 7์ 21 ๋ถ ์
@zreigz ์ ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
_2016๋ 11์ 17์ผ 7์ 30๋ถ @zreigz ์์_
๊ด์ฐฎ์์ :)
docker-in-docker๋ก CI๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
@errordeveloper @zreigz ์ด ์์
์ ์ํํ ์ ์์ต๋๊น?
์ ์ด๋ ์ปจํ
์ด๋ ๋ด๋ถ์์ kubeadm์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ด๋๊ฐ์ ๋ฌธ์ํํด์ผ ํฉ๋๋ค...
๋์๊ฒ ์ข์ ์๋ฆฌ. ํ์คํ ์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ๊ฒ์ ๋์ปค ์ด๋ฏธ์ง์ ์ถ๊ฐํ๊ณ ๋ง์คํฐ์ ๋ ธ๋๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ผ๋ถ ๊ตฌ์ฑ/์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ด์ผ ํฉ๋๋ค. ์ข์ ์์์ kubernetes/kubeadm-docker์ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค. Dockerfile, ์คํฌ๋ฆฝํธ ๋ฐ ๋ฌธ์๋ฅผ ์ํ ์ฌ๋ฐ๋ฅธ ์ฅ์์ด๊ธฐ๋ ํฉ๋๋ค.
๋จผ์ zreigz/ ์๋์ ๊ฐ์ธ ํ๋ก์ ํธ๋ก ์์ฑํ๊ณ ๊ฒฐ๊ตญ์๋ ํด๋น ์ฝ๋๋ฅผ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ณํฉํ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ๋จผ์ ์์ ์ ๊ณต๊ฐ์์ ํ๋กํ ํ์ ์ ๋ง๋ค๊ณ ์ด๋ป๊ฒ ์งํ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ค์ ์์์ธ์ @zreigz์ ๋๋ค.
๋ค ์ข์ ์ง์ ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ํ ๊ฒ์ด๋ค. ๋ค์์ฃผ(์์์ผ,ํ์์ผ) ํ์์ค์ด๋ผ ์์์ผ๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
@luxas kubeadm ๋ฐ kubernetes-cni ํจํค์ง๋ฅผ ์ด๋ป๊ฒ ์ ๊ณตํด์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค. ํ์ฌ ์์ค์์ ๋น๋ํด์ผ ํ๊ฑฐ๋(์ต์ ๊ตฌํ์ ํ ์คํธํ ์ ์๋๋ก) ์ ์ฅ์์์ ์ต์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๊น? CI ๋ชฉ์ ์ ์ํด ํ ์คํธํ ์ ์๋ ์ฝ๋์ ํ์ฌ ์ํ๊ฐ ์์ด์ผ ํฉ๋๊น, ์๋๋ฉด ๋ฆด๋ฆฌ์ค ๋ฒ์ ์ ํ ์คํธํ๋ ๋ฐ ํ์ํ ๊ฒ์ ๋๊น?
์๋ ํ์ธ์ ์์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ํ์ง๋ง kubeadm init ํ์๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. DNS์์ 0/3์ด ํ์๋๊ณ , DNS๊ฐ ์ ํ ์คํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
2.0์ด๋ง๋ค: kubectl get pods --all-namespaces Fri Dec 16 17:00:50 2016
๋ค์์คํ์ด์ค ์ด๋ฆ ์ค๋น ์ํ ๋ค์ ์์ ๋์ด
kube-system dummy-2088944543-17sey 1/1 ์คํ 0 11m
kube-system etcd-8dd8c92c6c38 1/1 ๋ฌ๋ 2 12m
kube-system kube-apiserver-8dd8c92c6c38 1/1 ์คํ 4 12m
kube-system kube-controller-manager-8dd8c92c6c38 1/1 ๋ฌ๋ 2 11m
kube-system kube-discovery-1150918428-m506w 1/1 ์คํ ์ค 0 11m
kube-system kube-dns-654381707-vuijm 0/3 ContainerCreating 0 11m
kube-system kube-proxy-tuw6u 0/1 CrashLoopBackOff 6 11m
kube-system kube-scheduler-8dd8c92c6c38 1/1 ๋ฌ๋ 2 10m
๋คํธ์ํฌ ์ ์ฑ
์ค์น ์๋
root@8dd8c92c6c38 :/# kubectl ์ ์ฉ -f calico.yaml
"calico.yaml" ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค
root@8dd8c92c6c38 :/# kubectl create -f calico.yaml
"calico.yaml" ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค
root@8dd8c92c6c38 :/# kubectl ์ ์ฉ -f kube-flannel.yml
"kube-flannel.yml" ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค
root@8dd8c92c6c38 :/# kubectl ์ ์ฉ -f https://git.io/weave-kube
๋ฐ๋ชฌ์
"weave-net" ์์ฑ
root@8dd8c92c6c38 :/# kubectl get pods --all-namespaces
๋ค์์คํ์ด์ค ์ด๋ฆ ์ค๋น ์ํ ๋ค์ ์์ ๋์ด
kube-system dummy-2088944543-17sey 1/1 ๋ฌ๋ 0 46m
kube-system etcd-8dd8c92c6c38 1/1 ๋ฌ๋ 2 46m
kube-system kube-apiserver-8dd8c92c6c38 1/1 ์คํ 4 46m
kube-system kube-controller-manager-8dd8c92c6c38 1/1 ๋ฌ๋ 2 45m
kube-system kube-discovery-1150918428-9m6rr 0/1 ๋ณด๋ฅ ์ค 0 3m
kube-system kube-dns-654381707-vuijm 0/3 ์ปจํ
์ด๋ ์์ฑ 0 45m
kube-system kube-proxy-tuw6u 0/1 CrashLoopBackOff 13 45m
kube-system kube-scheduler-8dd8c92c6c38 1/1 ๋ฌ๋ 2 44m
kube-system weave-net-iv0bc 0/2 ContainerCreating 0 49s
์ ๋ณด: 1๊ฐ์ ์๋ฃ๋ ๊ฐ์ฒด๊ฐ ํฌ๋ ๋ชฉ๋ก์ ํ์๋์ง ์์์ต๋๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ณด๋ ค๋ฉด --show-all์ ์ ๋ฌํ์ญ์์ค.
์๋
ํ์ธ์ @zreigz
์ด์ ๋ง์นจ๋ด ์ด๊ฒ์ผ๋ก ๋ ๋์๊ฐ ํ
์คํธ ํ ์๊ฐ์ด ์๊ฒผ์ต๋๋ค. ๊ฑฐ์ ๋ง๋ค ์ ์์ง๋ง docker๊ฐ vfs ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๋ฅผ ์ ํํ๋ ์ค๋ฅ๊ฐ ์์ต๋๋ค (์๋ง๋ aufs ์์ aufs๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ ๊ฒ์ฒ๋ผ ์์ ์ธ๋ถ ๋์ปค .sock์ ๋ด๋ถ ๋์ปค์ ์ฅ์ฐฉํ๊ณ ์์ผ๋ฏ๋ก aufs๋ก ์ธ ์ ์์ด์ผ ํฉ๋๊น?
๋ด ํธ์คํธ ์ปดํจํฐ์์ docker info
aufs ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๋ฅผ ์คํ ์ค์ด๋ผ๊ณ ํ์๋ฉ๋๋ค. - ๋ฐ๋ฉด kubernetes๋ฅผ ์ฌ์ฉํ์ฌ ๋์ปค ์ปจํ
์ด๋ ๋ด๋ถ์์ docker info
๋ฅผ ์ํํ๋ฉด vfs ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ์๋ฉ๋๋ค.
์คํํ ๋ ๋ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ด์ ์ ๋ํ ์์ด๋์ด
kubeadm init
root<strong i="13">@f50f087baa83</strong>:/# kubeadm init
[kubeadm] WARNING: kubeadm is in alpha, please do not use it for production clusters.
[preflight] Running pre-flight checks
[preflight] The system verification failed. Printing the output from the verification:
OS: Linux
KERNEL_VERSION: 4.4.0-43-generic
CONFIG_NAMESPACES: enabled
CONFIG_NET_NS: enabled
CONFIG_PID_NS: enabled
CONFIG_IPC_NS: enabled
CONFIG_UTS_NS: enabled
CONFIG_CGROUPS: enabled
CONFIG_CGROUP_CPUACCT: enabled
CONFIG_CGROUP_DEVICE: enabled
CONFIG_CGROUP_FREEZER: enabled
CONFIG_CGROUP_SCHED: enabled
CONFIG_CPUSETS: enabled
CONFIG_MEMCG: enabled
CONFIG_INET: enabled
CONFIG_EXT4_FS: enabled
CONFIG_PROC_FS: enabled
CONFIG_NETFILTER_XT_TARGET_REDIRECT: enabled (as module)
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled (as module)
CONFIG_OVERLAY_FS: enabled (as module)
CONFIG_AUFS_FS: enabled (as module)
CONFIG_BLK_DEV_DM: enabled
CGROUPS_CPU: enabled
CGROUPS_CPUACCT: enabled
CGROUPS_CPUSET: enabled
CGROUPS_DEVICES: enabled
CGROUPS_FREEZER: enabled
CGROUPS_MEMORY: enabled
DOCKER_VERSION: 1.12.1
DOCKER_GRAPH_DRIVER: vfs
[preflight] Some fatal errors occurred:
unsupported graph driver: vfs
[preflight] If you know what you are doing, you can skip pre-flight checks with `--skip-preflight-checks`
root<strong i="14">@f50f087baa83</strong>:/#
์กฐ๊ธ ๋ ์๋ํ ํ ์ถ๊ฐ ์ ๋ณด.
ํธ์คํธ์์ ๋์ปค ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๋ฅผ "์ค๋ฒ๋ ์ด"๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ docker ๋ด๋ถ์ docker๋ aufs๋ฅผ ๋๋ผ์ด๋ฒ๋ก ์ ํํ์ต๋๋ค. "์ฌ์ ๋นํ ๊ฒ์ฌ"๋ฅผ ํต๊ณผํ์ง๋ง ์ง๊ธ์
[apiclient] Created API client, waiting for the control plane to become ready
๋ค๋ฅธ ํ
์คํธ์์ ๋์ปค๊ฐ /sbin/init๋ฅผ ํตํด ์๋น์ค๋ก ์์๋์์ ๋ ๋์ผํ ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๋ฅผ ์ ํํ์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ด๋ฐ ์์ผ๋ก ์คํํ๋ฉด ํธ์คํธ์ ๋์ผํ ๋๋ผ์ด๋ฒ๊ฐ ์์๋์ง ์์ต๋๋ค(์์์ ์ธ๊ธํ ๋๋ก).
sudo docker run -it --privileged=true -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock kubeadm_docker /sbin/init
/sbin/init
์์ด ์์ํ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋ฐ๋ชฌ์ด ์๋ ๊ฒฝ์ฐ:
sudo docker run -it --privileged=true --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /var/run/docker.sock:/var/run/docker.sock kubeadm_docker /bin/bash
๊ทธ๋ฌ๋ฉด ๋์ปค๊ฐ ํธ์คํธ์ ๋์ผํ ์คํ ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๋ฅผ ์ ํํ์ต๋๋ค(๊ทธ๋ฌ๋ ์ง๊ธ์ systemctrl
๊ฐ ์๋ํ์ง ์์).
์ถ๊ฐ ์ ๋ฐ์ดํธ:
์ด์ ์ด Dockerfile์ ์ฌ์ฉํ์ฌ ์๋ํ๋ kubeadm-in-docker-container๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค.
FROM ubuntu:xenial-20161213
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq
RUN apt-get install -y \
apt-transport-https \
apt-utils \
ca-certificates \
curl \
dialog \
python \
daemon \
vim \
jq \
linux-image-$(uname -r)
# remove unwanted systemd services
RUN for i in /lib/systemd/system/sysinit.target.wants/*; 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/*;
# install docker (after removing unwanted systemd)
RUN apt-get install -y \
docker.io
RUN echo "Add Kubernetes repo..."
RUN sh -c 'curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -'
RUN sh -c 'echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list'
RUN echo "Installing Kubernetes requirements..."
RUN apt-get update -y && apt-get install -y \
kubelet \
kubernetes-cni \
kubectl
RUN echo "Installing Kubeadm - this will fail at post-install but that doesn't matter"
RUN apt-get install -y \
kubeadm; exit 0
# Create volume for docker
VOLUME /var/lib/docker
๋ค์์ผ๋ก ๋น๋: docker build -t kubeadm_docker .
๊ทธ๋ฐ ๋ค์ ๋ค์์ ์คํํฉ๋๋ค.
docker run -it --privileged=true --name=master -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro kubeadm_docker /sbin/init
systemd ๋ฐ docker๊ฐ ์คํ๋ ๋๊น์ง ๋ช ์ด(10-15์ด) ๊ธฐ๋ค๋ฆฝ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์คํ ์ค์ธ ์ปจํ
์ด๋ ๋ด์์ kubeadm์ ์์ํฉ๋๋ค.
docker exec -it master kubeadm init --token=acbec6.2852dff7cb569aa0
์์๋ ๋ ๋ ๋ฒ์งธ "์์ ์" ๋ ธ๋๋ฅผ ์์ํฉ๋๋ค.
docker run -it --privileged=true --name=node -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro kubeadm_docker /sbin/init
๊ทธ๋ฆฌ๊ณ ๋ช ์ด ํ์ ๋ง์คํฐ์ ํฉ๋ฅํ์ญ์์ค.
docker exec -it edge kubeadm join --token=acbec6.2852dff7cb569aa0 172.17.0.2
ํ์ฌ kube-proxy๊ฐ ์คํจํ๊ณ CrashLoopBackOff์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๋์ปค ๋คํธ์ํฌ์ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์์ ๋์ปค๋ฅผ ์คํํ ๋ ๋์ --net=host
ํ๋ฉด kube-proxy์ ๋ชจ๋ ํฌ๋๊ฐ ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค. ํ์ง๋ง ์ปจํ
์ด๋๊ฐ ip๋ฅผ ์ฌ์ฉํ์ฌ ๋์ปค ๋คํธ์ํฌ์์ ์คํ๋์ด์ผ ํ๋ฏ๋ก ์ต์
์ด ์๋๋๋ค. NS
๋๋ ๋ํ ์ด์ ์ ํธ์คํธ์์์ ๋์ผํ ํ๋ก์ธ์ค๋ก ๋์ปค๋ฅผ ์คํํ๋ ค๊ณ ์๋ํ์ง๋ง: -v /var/run/docker.sock:/var/run/docker.sock
์ปจํ
์ด๋ ๋ด๋ถ์ ๋์ปค๊ฐ systemd๋ก ์์๋ ๋ ์๋ง์ ์ ํํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์์ต๋๋ค. ์ ๊ฒ).
@andersla ๊ฐ์ฌํฉ๋๋ค!
kube-proxy๊ฐ ์คํจํ๋ ๊ฒ์ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๊น?
๊ด์ฌ์ ๊ฐ์ ธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค
๋ถํํ๋ journalctl -xeu kubelet
์ธ๋ถ์ ๋ณด๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ kube-proxy์ ๋ํด ์ฐพ์ ์ ๋ถ์ ๋๋ค(์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต๋จ) ์ ์ฒด ๋ก๊ทธ๋ ์ฒจ๋ถํฉ๋๋ค.
Jan 09 14:40:02 1355b98bf8c7 kubelet[244]: I0109 14:40:02.690862 244 docker_manager.go:2524] checking backoff for container "kube-proxy" in pod "kube-proxy-7886l"
Jan 09 14:40:03 1355b98bf8c7 kubelet[244]: I0109 14:40:03.984818 244 docker_manager.go:2538] Back-off 20s restarting failed container=kube-proxy pod=kube-proxy-7886l_kube-system(71a1e950-d679-11e6-a9f7-02429d4c0f01)
Jan 09 14:40:03 1355b98bf8c7 kubelet[244]: E0109 14:40:03.984833 244 pod_workers.go:184] Error syncing pod 71a1e950-d679-11e6-a9f7-02429d4c0f01, skipping: failed to "StartContainer" for "kube-proxy" with CrashLoopBackOff: "Back-off 20s restarting failed container=kube-proxy pod=kube-proxy-7886l_kube-system(71a1e950-d679-11e6-a9f7-02429d4c0f01)"
์ ์ฒด ๋ก๊ทธ๋ kube-dns์ ๋ํด ๋ถํํฉ๋๋ค. ํ์ง๋ง ๊ทธ๊ฑด ์ ๊ฐ ์์ง weve๋ฅผ ์์ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค.
kubectl describe pod -n kube-system kube-proxy-w0ng5
๋ก๊ทธ์
๋๋ค.
Name: kube-proxy-w0ng5
Namespace: kube-system
Node: 3551807cba77/172.17.0.2
Start Time: Tue, 10 Jan 2017 18:03:06 +0000
Labels: component=kube-proxy
k8s-app=kube-proxy
kubernetes.io/cluster-service=true
name=kube-proxy
tier=node
Status: Running
IP: 172.17.0.2
Controllers: DaemonSet/kube-proxy
Containers:
kube-proxy:
Container ID: docker://dcc2bc0b50a2477b72d451b776f35e327f1faf09e3cddb25d5609569c6f2a242
Image: gcr.io/google_containers/kube-proxy-amd64:v1.5.1
Image ID: docker-pullable://gcr.io/google_containers/kube-proxy-amd64<strong i="7">@sha256</strong>:3b82b2e0862b3c0ece915de29a5a53634c9b0a73140340f232533c645decbd4b
Port:
Command:
kube-proxy
--kubeconfig=/run/kubeconfig
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Tue, 10 Jan 2017 18:08:48 +0000
Finished: Tue, 10 Jan 2017 18:08:48 +0000
Ready: False
Restart Count: 6
Volume Mounts:
/run/kubeconfig from kubeconfig (rw)
/var/run/dbus from dbus (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-g0ft5 (ro)
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
kubeconfig:
Type: HostPath (bare host directory volume)
Path: /etc/kubernetes/kubelet.conf
dbus:
Type: HostPath (bare host directory volume)
Path: /var/run/dbus
default-token-g0ft5:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-g0ft5
QoS Class: BestEffort
Tolerations: dedicated=master:NoSchedule
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Pullingpulling image "gcr.io/google_containers/kube-proxy-amd64:v1.5.1"
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal CreatedCreated container with docker id ecf446de342a; Security:[seccomp=unconfined]
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal StartedStarted container with docker id ecf446de342a
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Pulled Successfully pulled image "gcr.io/google_containers/kube-proxy-amd64:v1.5.1"
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal CreatedCreated container with docker id f562fb667a64; Security:[seccomp=unconfined]
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal StartedStarted container with docker id f562fb667a64
9m 9m 2 {kubelet 3551807cba77} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "kube-proxy" with CrashLoopBackOff: "Back-off 10s restarting failed container=kube-proxy pod=kube-proxy-w0ng5_kube-system(09c4f65d-d75f-11e6-814c-0242255c9a68)"
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Started Started container with docker id 1a7d7d4f682b
9m 9m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Created Created container with docker id 1a7d7d4f682b; Security:[seccomp=unconfined]
9m 9m 2 {kubelet 3551807cba77} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "kube-proxy" with CrashLoopBackOff: "Back-off 20s restarting failed container=kube-proxy pod=kube-proxy-w0ng5_kube-system(09c4f65d-d75f-11e6-814c-0242255c9a68)"
8m 8m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Started Started container with docker id 89bdf4ba7e0b
8m 8m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Created Created container with docker id 89bdf4ba7e0b; Security:[seccomp=unconfined]
8m 8m 3 {kubelet 3551807cba77} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "kube-proxy" with CrashLoopBackOff: "Back-off 40s restarting failed container=kube-proxy pod=kube-proxy-w0ng5_kube-system(09c4f65d-d75f-11e6-814c-0242255c9a68)"
8m 8m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Created Created container with docker id f2b7a2b5078d; Security:[seccomp=unconfined]
8m 8m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Started Started container with docker id f2b7a2b5078d
8m 7m 6 {kubelet 3551807cba77} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "kube-proxy" with CrashLoopBackOff: "Back-off 1m20s restarting failed container=kube-proxy pod=kube-proxy-w0ng5_kube-system(09c4f65d-d75f-11e6-814c-0242255c9a68)"
6m 6m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Created Created container with docker id 28deaf41d920; Security:[seccomp=unconfined]
6m 6m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Started Started container with docker id 28deaf41d920
6m 4m 12 {kubelet 3551807cba77} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "kube-proxy" with CrashLoopBackOff: "Back-off 2m40s restarting failed container=kube-proxy pod=kube-proxy-w0ng5_kube-system(09c4f65d-d75f-11e6-814c-0242255c9a68)"
9m 4m 6 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Pulled Container image "gcr.io/google_containers/kube-proxy-amd64:v1.5.1" already present on machine
4m 4m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Created Created container with docker id dcc2bc0b50a2; Security:[seccomp=unconfined]
4m 4m 1 {kubelet 3551807cba77} spec.containers{kube-proxy} Normal Started Started container with docker id dcc2bc0b50a2
9m 10s 43 {kubelet 3551807cba77} spec.containers{kube-proxy} Warning BackOff Back-off restarting failed docker container
4m 10s 18 {kubelet 3551807cba77} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "kube-proxy" with CrashLoopBackOff: "Back-off 5m0s restarting failed container=kube-proxy pod=kube-proxy-w0ng5_kube-system(09c4f65d-d75f-11e6-814c-0242255c9a68)"
์, _๊ทธ_๋ ํฌ๋์๋ฃจํ์ธ ๊ฒ์ ์์ง๋ง kubectl -n kube-system logs kube-proxy-w0ng5
๋ฅผ ์ค ์ ์์ต๋๊น?
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ค์ ๋ก ๊ทธ ์ด์ ๋ฅผ _why_ :smile:
์ด์ผ ๋ฉ์ง๋ค์ :)
root@3551807cba77 :/# kubectl -n kube-system ๋ก๊ทธ kube-proxy-w0ng5
I0110 18:29:01.705993 1 server.go:215] Using iptables Proxier.
W0110 18:29:01.706933 1 proxier.go:254] clusterCIDR not specified, unable to distinguish between internal and external traffic
I0110 18:29:01.706947 1 server.go:227] Tearing down userspace rules.
I0110 18:29:01.712693 1 conntrack.go:81] Set sysctl 'net/netfilter/nf_conntrack_max' to 262144
I0110 18:29:01.712927 1 conntrack.go:66] Setting conntrack hashsize to 65536
write /sys/module/nf_conntrack/parameters/hashsize: operation not supported
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. --conntrack-max-per-core=0
๋ฅผ ์ค์ ํ ๋ค์ ํ๋ก์๋ฅผ ๋ค์ ์์ํฉ๋๋ค. 0-val์ nf_conntrack_max ์ฌ๊ตฌ์ฑ์ ๊ฑด๋๋ฐ๊ณ ๊ทธ๋๋ก ๋ก๋๋ค(65536). ๋ค์๊ณผ ๊ฐ์ด ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฃผ์
ํฉ๋๋ค.
๋จผ์ ๋์ปค ์ปจํ
์ด๋๋ฅผ ์
๋ ฅํ์ญ์์ค.
docker exec -it master bash
๊ทธ๋ฐ ๋ค์ ์์ ์ฌํญ์ ์ ์ฉํ์ญ์์ค.
kubectl -n kube-system get ds -l 'component=kube-proxy' -o json | jq '.items[0].spec.template.spec.containers[0].command |= .+ ["--conntrack-max-per-core=0"]' | kubectl apply -f - && kubectl -n kube-system delete pods -l 'component=kube-proxy'
์ด์ ๋์ค์ kubectl apply -f weave.yaml
์ํํ ๋ ๋์ Weave์์ CrashLoop๋ฅผ ์ป์ต๋๋ค. ๋ค์์ weave ํฌ๋์ ๋ก๊ทธ ์ถ๋ ฅ์
๋๋ค.
/proc/sys/net/bridge/bridge-nf-call-iptables not found
๋ํ kube-proxy ๋งค๊ฐ๋ณ์ --proxy-mode=userspace
ํ์ง๋ง ๊ฒฐ๊ณผ๋ ๋์ผํ์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ์ง์กฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค: https://github.com/weaveworks/weave/pull/2659
@andersla ์, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. HEAD์์ ๋น๋๋ฅผ ์๋ํ ์ ์์ต๋๊น?
์๋ฅผ ๋ค์ด HEAD~ish์์ ๊ฐ์ ธ์จ luxas/weave-(kube|npc):v1.9.0-alpha.5
์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ํ๋์ง ์๋ ค์ฃผ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ฅผ ํ์ฉํ ์ ์๋๋ก ์ง๊ธ ํ๊ณ ์๋ ์์
(์
ธ ๋ช
๋ น, Dockerfile, ๊ธฐํ ์คํฌ๋ฆฝํธ ๋ฑ)์ ์ฌ๊ธฐ์ ์ ํํ ์ค๋ช
ํ์ธ์.
weaveworks/weave-kube์ ์ต์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋๋ ๋ํ ์ต์ yaml-template https://github.com/weaveworks/weave/blob/master/prog/weave-kube/weave-daemonset.yaml์ ์ฌ์ฉํ์ต๋๋ค.
๋ถํํ๋ kube-dns๊ฐ ์๋ํ์ง ์์์ต๋๋ค(ContainerCreating์ ๊ทธ๋๋ก ์์ต๋๋ค. weave๋ฅผ ์์ํ ํ kubelet์ ์ค๋ฅ ๋ฉ์์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
an 15 16:14:30 7c12205804da kubelet[540]: I0115 16:14:30.443327 540 operation_executor.go:917] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/c23fb73d-db39-11e6-b84d-0242b1ac1840-default-token-142vd" (spec.Name: "default-token-142vd") pod "c23fb73d-db39-11e6-b84d-0242b1ac1840" (UID: "c23fb73d-db39-11e6-b84d-0242b1ac1840").
Jan 15 16:14:31 7c12205804da kubelet[540]: E0115 16:14:31.381741 540 docker_manager.go:373] NetworkPlugin cni failed on the status hook for pod 'kube-dns-2924299975-9gjcg' - Unexpected command output Device "eth0" does not exist.
Jan 15 16:14:31 7c12205804da kubelet[540]: with error: exit status 1
๋ง์คํฐ ๋ ธ๋๋ง ์์ํ๊ณ ๋ค๋ฅธ ๋ ธ๋์ ํฉ๋ฅํ์ง ์์ผ๋ฉด weave.yaml์ ์ ์ฉํ์ ๋ kubedns๊ฐ ์ ์์ ์ผ๋ก ๋ํ๋ฉ๋๋ค.
๋ํ ๋์ปค ์คํ์ด ์๋ Vagrant ์ค์น์์ ์ต์ weave-kube๋ก weave.yaml์ ํ ์คํธํ ๋ค์ ๋ชจ๋ ์๋ํ์ต๋๋ค.
kubectl apply -f weave.yaml
์ฌ์ฉํ weave.yaml์
๋๋ค.
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: weave-net
namespace: kube-system
spec:
template:
metadata:
labels:
name: weave-net
annotations:
scheduler.alpha.kubernetes.io/tolerations: |
[
{
"key": "dedicated",
"operator": "Equal",
"value": "master",
"effect": "NoSchedule"
}
]
spec:
hostNetwork: true
hostPID: true
containers:
- name: weave
image: weaveworks/weave-kube:latest
imagePullPolicy: Always
command:
- /home/weave/launch.sh
livenessProbe:
initialDelaySeconds: 30
httpGet:
host: 127.0.0.1
path: /status
port: 6784
securityContext:
privileged: true
volumeMounts:
- name: weavedb
mountPath: /weavedb
- name: cni-bin
mountPath: /host/opt
- name: cni-bin2
mountPath: /host/home
- name: cni-conf
mountPath: /host/etc
- name: dbus
mountPath: /host/var/lib/dbus
resources:
requests:
cpu: 10m
- name: weave-npc
image: weaveworks/weave-npc:latest
imagePullPolicy: Always
resources:
requests:
cpu: 10m
securityContext:
privileged: true
restartPolicy: Always
volumes:
- name: weavedb
emptyDir: {}
- name: cni-bin
hostPath:
path: /opt
- name: cni-bin2
hostPath:
path: /home
- name: cni-conf
hostPath:
path: /etc
- name: dbus
hostPath:
path: /var/lib/dbus
์๋ ์๋ค์, ๋๋์ด ์ค๋ ๋์ ๋ถ๋ช์ณค๊ณ ๊ทธ๊ฒ์ ๋ฐ์๋ฅผ ๋ง์ณ ๋์๋ค! ์ข์ ๋ฌผ๊ฑด.
๋๋ ์ฐ๋ฆฌ repo์ ๋ํด CI์ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค(์์งํ ์๋นํ ๋ณต์กํฉ๋๋ค). ์ฐ๋ฆฌ๋ CI์ฉ ์ฐจํธ๋ฅผ ๋ช ๊ฐ ์์ํ๊ธฐ ์ํ Helm/Tiller ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ด ์์ ์ ์ํํ๊ธฐ ์ํ ์ ์ ์ฌํญ์ด ์์ต๋๊น? Tiller๋ ์ด ์ํฉ์์ ์ค์ค๋ก๋ฅผ ํ๋ฏ๋ ๊ฒ ๊ฐ์ต๋๋ค.
root<strong i="7">@JINKITNIX05</strong>:~/openstack-helm# kubectl logs tiller-deploy-3299276078-6kdzw -n kube-system
Error from server (BadRequest): the server rejected our request for an unknown reason (get pods tiller-deploy-3299276078-6kdzw)
root<strong i="8">@JINKITNIX05</strong>:~/openstack-helm#
๋ค๋ฅธ SDN์ผ๋ก ์๋ํ ์ ์์ต๋๋ค. L3๊ฐ ํดํน๋ ์ํฉ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๊ฐ ์กฐ๊ธ ๋ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ ์ง๊ธ๊น์ง Calico๋ฅผ ์ฌ์ฉํด ์์ง๋ง Weave๊ฐ ๋ ๋ซ๋ค๋ฉด(L2์ด๊ธฐ ๋๋ฌธ์)... Tiller ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ์๋ํ ๊ฒ์ ๋๋ค. Tiller๋ ๊ฒฐ๊ตญ 127.0.0.1๊ณผ ๊ด๋ จ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋ถํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ณผ๊ฑฐ์ ๋ค๋ฅธ ํ ์คํธ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณด์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ค ์ ๋ ฅ๋ ๋๋์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋ฌผ๊ฑด์ ํดํนํ๋ ์ฌ๋๋ค์๊ฒ ์ ๋ง ๋ฉ์ง ์ํ์ ๋๋ค! ๊ฐ์ฌ ํด์!!
์๋ ํ์ธ์! ๋ ๋ง์ ์ฌ๋๋ค์ด ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ๋ ์ฅ์๋ชฉ์ ๋ํ ๊ฒฝํ์ด ์์ต๋๋ค. ํด๋ผ์ฐ๋์์ Weave๋ฅผ ์คํํ๊ณ ์์ผ๋ฏ๋ก ์ด ํ๋ก์ ํธ์์ ์์ ํ๊ณ ์ถ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋งํ๊ณ ์์์ ์ค๋ช ํ ๋๋ก We ์ ์ฉํ ๋ kube-dns๊ฐ ๋ํ๋์ง ์๋ ์ด์ ๋ฅผ ๋ ํ๊ณ ๋ค ์๊ฐ์ด ์์์ต๋๋ค.
์ด์ ์ต์ ์์ ์ ์ธ ์ง์กฐ๊ฐ ์ด์ ๋ณด๋ค ๋ ์ ์๋ํฉ๋๋ค....
kubectl apply -f https://git.io/weave-kube
..ํ์ง๋ง ๋ถํํ๋ kube-dns๊ฐ ๋ํ๋์ง ์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ContainerCreating์์ ๋ฉ์ท์ต๋๋ค.
root<strong i="9">@18a7d1ec5124</strong>:/# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system dummy-2088944543-pvvdx 1/1 Running 0 5m
kube-system etcd-18a7d1ec5124 1/1 Running 0 4m
kube-system kube-apiserver-18a7d1ec5124 1/1 Running 2 5m
kube-system kube-controller-manager-18a7d1ec5124 1/1 Running 0 4m
kube-system kube-discovery-1769846148-6tv4l 1/1 Running 0 5m
kube-system kube-dns-2924299975-4608d 0/4 ContainerCreating 0 5m
kube-system kube-proxy-k0stq 1/1 Running 0 4m
kube-system kube-proxy-tnm8h 1/1 Running 0 4m
kube-system kube-scheduler-18a7d1ec5124 1/1 Running 0 4m
kube-system weave-net-mff6t 2/2 Running 0 3m
kube-system weave-net-t7zcl 2/2 Running 0 3m
weave๋ฅผ ์ ์ฉํ ํ ์ด ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ค์ง๋ฉ๋๋ค.
Feb 04 18:06:57 18a7d1ec5124 kubelet[252]: E0204 18:06:57.125434 252 pod_workers.go:184] Error syncing pod 7dc68091-eb04-11e6-a321-02425e578ba1, skipping: failed to "SetupNetwork" for "kube-dns-2924299975-4608d_kube-system" with SetupNetworkError: "Failed to setup network for pod \"kube-dns-2924299975-4608d_kube-system(7dc68091-eb04-11e6-a321-02425e578ba1)\" using network plugins \"cni\": cni config unintialized; Skipping pod"
๋์ ์ผ๋จ ๋ด๊ฐ ๋ณผ ๋ :
Feb 04 18:06:59 18a7d1ec5124 kubelet[252]: E0204 18:06:59.615375 252 docker_manager.go:373] NetworkPlugin cni failed on the status hook for pod 'kube-dns-2924299975-4608d' - Unexpected command output Device "eth0" does not exist.
Feb 04 18:06:59 18a7d1ec5124 kubelet[252]: with error: exit status 1
Flannel์ ๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋์ ์ฌ์ฉํ๋ฉด ์๋ํฉ๋๋ค.
docker exec -it master bash
curl -sSL "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" | kubectl create -f -
๋ฐ๋ผ์ Flannel์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ์๋ํ๋ฉฐ ๋ค์์ ์ ์ฒด ์ค์ ์ ๋๋ค.
๋์ปค ํ์ผ:
FROM ubuntu:xenial-20161213
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq
RUN apt-get install -y \
apt-transport-https \
apt-utils \
ca-certificates \
curl \
dialog \
python \
daemon \
vim \
jq
# remove unwanted systemd services
RUN for i in /lib/systemd/system/sysinit.target.wants/*; 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/*;
# install docker (after removing unwanted systemd)
RUN apt-get install -y \
docker.io
RUN echo "Add Kubernetes repo..."
RUN sh -c 'curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -'
RUN sh -c 'echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list'
RUN echo "Installing Kubernetes requirements..."
RUN apt-get update -y && apt-get install -y \
kubelet \
kubernetes-cni \
kubectl
RUN echo "Installing Kubeadm - this will fail at post-install but that doesn't matter"
RUN apt-get install -y \
kubeadm; exit 0
# Create volume for docker
VOLUME /var/lib/docker
๋ค์์ ์ฌ์ฉํ์ฌ ๋น๋ํ์ญ์์ค.
docker build -t kubeadm_docker .
๊ทธ๋ฐ ๋ค์ ๋ค์์ ์คํํฉ๋๋ค.
docker run -it --privileged=true --name=master -h master -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro kubeadm_docker /sbin/init
systemd ๋ฐ docker๊ฐ ์คํ๋ ๋๊น์ง ๋ช ์ด(10-15์ด) ๊ธฐ๋ค๋ฆฝ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์คํ ์ค์ธ ์ปจํ
์ด๋ ๋ด์์ kubeadm์ ์์ํฉ๋๋ค.
docker exec -it master kubeadm init --skip-preflight-checks --token=acbec6.2852dff7cb569aa0
์์๋ ๋ ๋ ๋ฒ์งธ "์์
์" ๋
ธ๋๋ฅผ ์์ํฉ๋๋ค.
docker run -it --privileged=true --name=node -h node -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro kubeadm_docker /sbin/init
๊ทธ๋ฆฌ๊ณ ๋ช ์ด ํ(systemd ๋ฐ docker๊ฐ ์๋ํ ๋๊น์ง) ๋ง์คํฐ์ ์ฐธ์ฌํฉ๋๋ค.
docker exec -it node kubeadm join --skip-preflight-checks --token=acbec6.2852dff7cb569aa0 172.17.0.2
๊ทธ๋ค์ด ํฉ๋ฅํ๋ฉด - ๋ง์คํฐ๋ฅผ ์
๋ ฅํ๊ณ kube-proxy ์ถฉ๋์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ์ฉํ์ญ์์ค.
docker exec -it master bash
kubectl -n kube-system get ds -l 'component=kube-proxy' -o json | jq '.items[0].spec.template.spec.containers[0].command |= .+ ["--conntrack-max-per-core=0"]' | kubectl apply -f - && kubectl -n kube-system delete pods -l 'component=kube-proxy'
๋ง์ง๋ง์ผ๋ก ํ๋๋ฌ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ ์ฉํฉ๋๋ค.
curl -sSL "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" | kubectl create -f -
์ด ์ค์ ์์ Kubernetes์ Helm, Traefic ๋๋ GlusterFS๋ฅผ ์ค์นํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. :)
kubeadm-dind-cluster๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์ง๋ง ์ค๋ช
์์ ์ค๋ช
ํ ๋๋ก ์๋ํ๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์๋์ผ๋ก ๋ช
๋ น์ ์
๋ ฅํ ํ์๊ฐ ์์ต๋๋ค. ๊ณง).
๋ํ ๋ก์ปฌ ์์ค์์ k8s ๊ตฌ์ฑ ์์์ kubeadm์ ๋ชจ๋ ์ฝ๊ฒ ๋น๋ํ๊ณ ์์ํ๋ ํด๋ฌ์คํฐ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ, ์์
ํ๋ ๋์ ๋ด๊ฐ ๋ง์ฃผ์ณค๋ ๊ฒ๋ณด๊ธฐ์ ๋ณด์ด์ง ์๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด, agetty๊ฐ 100% CPU๋ฅผ ๋จน๊ณ , ๋นํ์ฑํ์ ์ฃผ์ํ์ง ์๋ ํ ๋์ปค ์ถฉ๋์ ์ผ์ผํค๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
kubeadm-dind-cluster์ ๊ณง ์ ์ฉ๋ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ:
kubeadm-dind-cluster๋ e2e ํ ์คํธ๋ฅผ ์ํ ์๋ํ๋ ์ ๊ณตํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ํน์ฑ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ค์ ๋ณต์ฌํ์ง ์๊ณ (๋น๋ ๋ฐ์ดํฐ ์ปจํ ์ด๋์์ ์ง์ ๊ฐ์ ธ์ด) k8์ ๋น๋ํ๊ณ kubeadm-dind-cluster๋ฅผ ์คํํ๋ ๋ฐ ๋์ผํ ์๊ฒฉ ๋์ปค ์์ง์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ์์ ์ค์ธ ๊ฒฝ์ฐ ์ค์ํ ์ ์์ต๋๋ค. ๋๋ฆฐ ์ฐ๊ฒฐ์ ํตํ ์๊ฒฉ ๋์ปค ์ฌ์ฉ.
... ํด๋ฌ์คํฐ์ ์ก์ธ์คํ๊ธฐ ์ํด ๋ง์คํฐ ์ปจํ
์ด๋์์ docker exec
๋ฅผ ์ํํ ํ์๊ฐ ์๋๋ก ๋ก์ปฌ kubectl์ ๊ตฌ์ฑํ๋ค๋ ์ฌ์ค์ ์์ด๋ฒ๋ ธ์ต๋๋ค.
์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด DIND๋ ํ๋ฉด์ ์ผ๋ก๋ ์ฌ์ ๋ณด์ด์ง๋ง ์๊ธฐ์น ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ผ๋ถ ๋ฌธ์ ๋ kubeadm-dind-cluster ๋ฐ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ์์ ์ด๋ฏธ ์์ ๋์์ต๋๋ค. ์ : ๋น์ ์ดํด์ผ ํ ๋ช ๊ฐ์ง ๋ง์ดํธ๋ฅผ ํ ๋ํ ํ์, ์ฌ์ฉ STOPSIGNAL SIGRTMIN+3
ํ๊ณ ์ ํน์ ์ ํญ ์ฌ์ฉํ๊ธฐ /sbin/init
๋ก ENTRYPOINT
ํ๊ณ VFS ๋๋ผ์ด๋ฒ ์๊ฐ์ ๋งค์ฐ ๋๋ฆด ์ ์์ต๋๋ค. ์... ์ฌ๊ธฐ ๋๋๊ณค์ด ์์ต๋๋ค ;)
@ivan4th kubeadm๊ณผ dind๋ก ์์
ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค :)
kubeadm-dind-cluster๋ฅผ ์ด ์ ์ฅ์์ ๋ณํฉํ๋ ๋ฐ ํ์ํ MVP์ ๋ํด ๋
ผ์ํ ์ ์๋ ์ด ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ๋ ์ ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์ต๋๊น?
๋น ๋ฅด๊ฒ ์ดํด๋ณธ ๊ฒฐ๊ณผ MVP๊ฐ ๋๊ธฐ ์ ์ ํ๊ณ ์ถ์ ๋ช ๊ฐ์ง ์ฌํญ์ ์ฐพ์์ต๋๋ค.
์ด๋ป๊ฒ ์๊ฐํ๋์? ๋ฉ์ง ์์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ค์ ๋ก ์ด๊ฒ์ kubeadm ๊ณต์์ ํตํฉํ๊ณ ์ถ์ต๋๋ค. +1:
cc @jbeda @lukemarsden @errordeveloper @mikedanese @timothysc @sttts
๋ฉ์ง ์์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ค์ ๋ก ์ด๊ฒ์ kubeadm ๊ณต์์ ํตํฉํ๊ณ ์ถ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ kubeadm-local-up-cluster๋ฅผ ๊ฐ๋ฐํ๊ณ ๊ตฌ์ถํ ์ ์๋ค๋ฉด ํ์์ ์ผ ๊ฒ์ ๋๋ค.
@ivan4th @luxas ์ด ์ํ๊ฐ ์ด๋ค๊ฐ์?
์ ๋ชจ๋ฅด๊ฒ ์ด... @ivan4th
@jamiehannaford
์ ์ฒด kdc ๋ ํ์ฌ ํํ์ IMO์์ ์๋นํ ์ ์ฉํฉ๋๋ค. ๋ํ Travis๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ฒด ๊ณต๊ฐ CI๊ฐ ์์ต๋๋ค(BTW ๋ํ ๊ด์ฌ์ด ์๋ ๊ฒฝ์ฐ CircleCI์์ DIND๋ฅผ ์คํํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค)
@luxas ์ ์ฒด DIND ํด๋ฌ์คํฐ ๋์ @andersla ์ ์๋ฃจ์ ์ ์ฌ์ฉํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด Docker ์ด๋ฏธ์ง๋ฅผ ์ด๋์์๋ ํธ์คํ ํด์ผ ํฉ๋๊น, ์๋๋ฉด Dockerfile์ด ์ด๋ป๊ฒ ๋ณด์ด๋์ง ๋ฌธ์ํํด์ผ ํฉ๋๊น?
1.9์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ด ์์ ์ ์ํํ ์ฃผ๊ธฐ๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋์ด ์๋ค๋ฉด ํ ์ ์์ต๋๋ค!
@jamiehannaford ๋ฌธ์ ๋ "์ ์ฒด" DIND ํด๋ฌ์คํฐ์ ๋๋ถ๋ถ์ด "๋จ์ํ" DIND ์ฌ์ฉ์์ ๋ฐ์ํ๋ ์๋ง์ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ๋ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋๋๋ก ๋งค์ฐ ๋ชจํธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด https://github.com/Mirantis/kubeadm-dind-cluster/commit/405c8bead4fb443582328fd3c7b8f01452872438์ ์ฐธ์กฐ kubeadm-dind-cluster ํ์ฌ , ๊ทธ๊ฒ์ ์ฌ์ ํ โโ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ์ต์ ์ํ๋ก ์ ์งํ๋ ค๊ณ ํฉ๋๋ค ( @danehans ๋ฐ @pmichali ๋ k8s IPv6 e2e ํ ์คํธ์ ์ฌ์ฉํ๊ณ Virtlet ์
์ฐ๋ฆฌ๋ ์ด์ SIG ํ์์์ ์ด์ ๋ํด ์ด์ผ๊ธฐํ์ผ๋ฉฐ ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค.
์์ ํ DIND ์๋ฃจ์
์ ๊ฐ๋ฐํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ๊ฐ๊น์ด ๋ฏธ๋์ ํต์ฌ kubeadm ํ์ ๋ฒ์์ ํฌํจ๋์ง ์์ต๋๋ค. Mirantis ํ๋ก์ ํธ์ ๋ํ @ivan4th ์ ๋
ธ๋ ฅ๊ณผ ๊ฐ์ด ์ปค๋ฎค๋ํฐ์์ ์ด๋ฌํ ์๋ฃจ์
์ ์ ๊ณตํ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค. ํด๋น ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ๋ฌธ์ํํ ์ ์๋ ์ข์ ์ฅ์๋ฅผ ์ฐพ์ผ๋ฉด ๊ฐ์ธ์ ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ์ฌ ํด์!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฐ๋ผ์ Flannel์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ์๋ํ๋ฉฐ ๋ค์์ ์ ์ฒด ์ค์ ์ ๋๋ค.
๋์ปค ํ์ผ:
๋ค์์ ์ฌ์ฉํ์ฌ ๋น๋ํ์ญ์์ค.
docker build -t kubeadm_docker .
๊ทธ๋ฐ ๋ค์ ๋ค์์ ์คํํฉ๋๋ค.
docker run -it --privileged=true --name=master -h master -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro kubeadm_docker /sbin/init
systemd ๋ฐ docker๊ฐ ์คํ๋ ๋๊น์ง ๋ช ์ด(10-15์ด) ๊ธฐ๋ค๋ฆฝ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์คํ ์ค์ธ ์ปจํ ์ด๋ ๋ด์์ kubeadm์ ์์ํฉ๋๋ค.
docker exec -it master kubeadm init --skip-preflight-checks --token=acbec6.2852dff7cb569aa0
์์๋ ๋ ๋ ๋ฒ์งธ "์์ ์" ๋ ธ๋๋ฅผ ์์ํฉ๋๋ค.
docker run -it --privileged=true --name=node -h node -d --security-opt seccomp:unconfined --cap-add=SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro kubeadm_docker /sbin/init
๊ทธ๋ฆฌ๊ณ ๋ช ์ด ํ(systemd ๋ฐ docker๊ฐ ์๋ํ ๋๊น์ง) ๋ง์คํฐ์ ์ฐธ์ฌํฉ๋๋ค.
docker exec -it node kubeadm join --skip-preflight-checks --token=acbec6.2852dff7cb569aa0 172.17.0.2
๊ทธ๋ค์ด ํฉ๋ฅํ๋ฉด - ๋ง์คํฐ๋ฅผ ์ ๋ ฅํ๊ณ kube-proxy ์ถฉ๋์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ์ฉํ์ญ์์ค.
docker exec -it master bash
kubectl -n kube-system get ds -l 'component=kube-proxy' -o json | jq '.items[0].spec.template.spec.containers[0].command |= .+ ["--conntrack-max-per-core=0"]' | kubectl apply -f - && kubectl -n kube-system delete pods -l 'component=kube-proxy'
๋ง์ง๋ง์ผ๋ก ํ๋๋ฌ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ ์ฉํฉ๋๋ค.
curl -sSL "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" | kubectl create -f -
์ด ์ค์ ์์ Kubernetes์ Helm, Traefic ๋๋ GlusterFS๋ฅผ ์ค์นํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. :)