源碼: https://github.com/openthings/kubernetesnode
轉載請註明來源:http://www.javashuo.com/article/p-tywdsgkq-du.htmllinux
該項目將示範如何經過Linuxkit建立一個最小的、不可更改的Kubernetes OS images,從而能夠從任何HyperVisor中直接運行虛擬機鏡像。git
可使用 LinuxKit tool 來從頭構建Linuxkit的工具集。github
若是已經安裝 go
,使用 go get -u github.com/linuxkit/linuxkit/src/cmd/linuxkit
來安裝Linuxkit。shell
在 MacOS 經過 brew tap
安裝linuxkit(參考:https://my.oschina.net/u/2306127/blog/1600376)。細節說明在 linuxkit/homebrew-linuxkit ,簡單運行以下:網絡
brew tap linuxkit/linuxkit brew install --HEAD linuxkit
從源代碼構建須要安裝:ssh
make
qemu
構建缺省的 OS images:工具
make all
這將基於 Docker Engine 構建並用於執行. 替代使用 cri-containerd,採用下面的方法:ui
make all KUBE_RUNTIME=cri-containerd
啓動Kubernetes master OS image 使用 hyperkit
( macOS),或者 qemu
(Linux):spa
./boot.sh
或者,自動化初始化集羣(無選項):
KUBE_MASTER_AUTOINIT="" ./boot.sh
獲得master的 IP 地址:
ip addr show dev eth0
Login 到 kubelet container:
./ssh_into_kubelet.sh <master-ip>
手動初始化 master (帶 kubeadm
),若是啓動時沒有 KUBE_MASTER_AUTOINIT
:
kubeadm-init.sh
一旦 kubeadm
推出, 確保拷貝 kubeadm join
參數, 而後嘗試 kubectl get nodes
從 master獲得信息。
若是但願運行single node cluster 在 master, 可使用:
kubectl taint nodes --all node-role.kubernetes.io/master- --kubeconfig /etc/kubernetes/admin.conf
啓動一個node,使用:
./boot.sh <n> [<join_args> ...]
啓動 3 nodes,使用 3 個不一樣的 shells,而後運行:
shell1> ./boot.sh 1 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 shell2> ./boot.sh 2 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443 shell3> ./boot.sh 3 --token bb38c6.117e66eabbbce07d 192.168.65.22:6443
按照上面的方法操做。
缺省狀況下,linuxkit run
使用 user mode 網絡,不支持從 host的訪問。爲了不這個問題,可使用端口轉發等方式。
KUBE_RUN_ARGS="-publish 2222:22" ./boot.sh ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 root@localhost
可是,你不能運行worker nodes,由於單個 instances 互相之間沒法看見。
爲了使能instance之間的網絡,須要 root
權限配置 bridge 和設置bridge mode privileged helper。
詳細的參考 http://wiki.qemu.org/Features/HelperNetworking ,簡單來講須要:
在host設置和配置bridge (包括 DHCP etc) 。 (你能夠重用 bridge,經過 virt-mananger
建立)
設置 qemu-bridge-helper
setuid root. 該位置與 distro不一樣, 可能爲 /usr/lib/qemu/qemu-bridge-helper
或 /usr/local/libexec/qemu-bridge-helper
或者其餘。須要 chmod u+s «PATH»
。
列出bridge,在上面第一步 /etc/qemu/bridge.conf
中,帶一行相似 allow br0
(若是bridge名稱爲 br0
)。
設置 KUBE_NETWORKING=bridge,«name»
等。
KUBE_NETWORKING="bridge,br0" ./boot.sh KUBE_NETWORKING="bridge,br0" ./boot.sh 1 «options»
該 boot.sh
腳本 有幾個配置變量,可使用環境變量進行覆蓋,以下方法:
KUBE_VCPUS=4 ./boot.sh