源码: https://github.com/openthings/kubernetes
LinuxKit的Kubernetes定制
转载请注明来源:https://my.oschina.net/u/2306127/blog/1601103
该项目将示范如何通过Linuxkit创建一个最小的、不可更改的Kubernetes OS images,从而可以从任何HyperVisor中直接运行虚拟机镜像。
Build 要求
可以使用 LinuxKit tool 来从头构建Linuxkit的工具集。
如果已经安装 go
,使用 go get -u github.com/linuxkit/linuxkit/src/cmd/linuxkit
来安装Linuxkit。
在 MacOS 通过 brew tap
安装linuxkit(参考:https://my.oschina.net/u/2306127/blog/1600376)。细节说明在 linuxkit/homebrew-linuxkit ,简单运行如下:
brew tap linuxkit/linuxkit
brew install --HEAD linuxkit
从源代码构建需要安装:
- GNU
make
- Docker
- optionally
qemu
构建 OS images
构建缺省的 OS images:
make all
这将基于 Docker Engine 构建并用于执行. 替代使用 cri-containerd,采用下面的方法:
make all KUBE_RUNTIME=cri-containerd
启动和初始化 OS images
启动Kubernetes master OS image 使用 hyperkit
( macOS),或者 qemu
(Linux):
./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
平台相关信息
MacOS
按照上面的方法操作。
Linux
缺省情况下,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