Kubeadm: ์ปจํ…Œ์ด๋„ˆ์—์„œ kubeadm์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ์ œ๊ณต ๋ฐ ๋ฐฉ๋ฒ• ๋ฌธ์„œํ™”

์— ๋งŒ๋“  2016๋…„ 11์›” 22์ผ  ยท  55์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubeadm

_@ andersla ์—์„œ 2016๋…„ 10์›” 27์ผ 18:8_

Ubuntu 16.04 ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— Kubeadm์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ๋ณด๊ณ 

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_

aretesting documentatiocontent-gap kinsupport prioritbacklog

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋”ฐ๋ผ์„œ 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๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. :)

๋ชจ๋“  55 ๋Œ“๊ธ€

_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์— ๊ณง ์ ์šฉ๋  ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ:

  • k8s ๋งˆ์Šคํ„ฐ์šฉ์œผ๋กœ ์ˆ˜์ •, kube-proxy๊ฐ€ ๊ณ ์žฅ๋‚ฌ์Šต๋‹ˆ๋‹ค.
  • ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ง€์›(์ด๋Ÿฌํ•œ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋„ ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ž„)์ด๋ฏ€๋กœ ๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ๋งŒ์œผ๋กœ๋„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. k8s๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์˜ CI์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋” ๋น ๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘์„ ์œ„ํ•œ Docker ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์บ์‹ฑ
  • ๋ธŒ๋ฆฌ์ง€ ์ด์™ธ์˜ CNI ๊ตฌํ˜„ ์ง€์›

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๊ฐ€ ๋˜๊ธฐ ์ „์— ํ•˜๊ณ  ์‹ถ์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

  • ์ด์ƒ์ ์œผ๋กœ๋Š” Go๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” Bash์—์„œ ๋ฒ—์–ด๋‚˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Go๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ Go์˜ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :)
  • ๋ฐ๋น„์•ˆ ๊ธฐ๋ฐ˜์€ gcr.io/google-containers/debian-base-$(ARCH):0.1์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • dind์˜ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋Š” ์ด์ƒ์ ์œผ๋กœ๋Š” gcr.io์— ๊ฒŒ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • kubeadm๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์•„์น˜์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์œ ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ ๋งค์‹œ๊ฐ„ ๋ชจ๋“  ์•„์น˜์— ๋Œ€ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” CI์—์„œ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • CNI๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๊ณต๊ธ‰์ž๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • kubeadm๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ†ตํ•ด ๊ตฌ์„ฑ ์˜ต์…˜์„ ๋…ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์˜ต์…˜์— ๋Œ€ํ•œ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • kubeadm v1.6+๋งŒ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋‚˜์š”? ๋ฉ‹์ง„ ์‹œ์ž‘์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๊ฒƒ์„ kubeadm ๊ณต์‹์— ํ†ตํ•ฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. +1:

cc @jbeda @lukemarsden @errordeveloper @mikedanese @timothysc @sttts

๋ฉ‹์ง„ ์‹œ์ž‘์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๊ฒƒ์„ kubeadm ๊ณต์‹์— ํ†ตํ•ฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ kubeadm-local-up-cluster๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ™˜์ƒ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ivan4th @luxas ์ด ์ƒํƒœ๊ฐ€ ์–ด๋–ค๊ฐ€์š”?

์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด... @ivan4th

@jamiehannaford

  • ์ง€๊ธˆ์€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋„ ํ•ด์•ผ ํ•ด์„œ Go rewrite๊ฐ€ ๋Šฆ์–ด์กŒ์Šต๋‹ˆ๋‹ค.
  • kdc๋Š” ๋‹ค์–‘ํ•œ CNI impls(๊ธฐ๋ณธ๊ฐ’์ธ Weave, Calico, Flannel ๋ฐ ์ผ๋ฐ˜ CNI ๋ธŒ๋ฆฌ์ง€)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์•„์ง ์—ฌ๊ธฐ์— ์—†์ง€๋งŒ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€์— ์‚ฌ์šฉ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ k8s ๋ฆด๋ฆฌ์Šค์—์„œ ๊ฐ€์ ธ์˜ค์ง€๋งŒ ์ž์‹ ์„ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์œผ๋กœ ๋ณ„๋„๋กœ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๊ฒƒ์€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ง€์›ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์‹ค์ œ๋กœ env vars ์„ธํŠธ์ž…๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋Š” ์—ฌ์ „ํžˆ ์šฐ๋ถ„ํˆฌ์ด์ง€๋งŒ ๋ฐ๋น„์•ˆ์œผ๋กœ ์ „ํ™˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” 1.6์„ ์ง€์›ํ•˜๊ณ  ๋‚˜๋Š” ๋‹ค์Œ ์ฃผ ์ดˆ์— 1.7์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

์ „์ฒด 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 ์˜ ๋…ธ๋ ฅ๊ณผ ๊ฐ™์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์žฅ์†Œ๋ฅผ ์ฐพ์œผ๋ฉด ๊ฐœ์ธ์ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰