Kubernetes(k8s)中文文件 基於Docker本地執行Kubernetes_Kubernetes中文社群
譯者:razr
概覽
下面的指引將高速你如何通過Docker建立一個單機、單節點的Kubernetes叢集。
下圖是最終的結果:
先決條件
1. 你必須擁有一臺安裝有Docker的機器。
2. 你的核心必須支援 memory and swap accounting 。確認你的linux核心開啟瞭如下配置:
CONFIG_RESOURCE_COUNTERS=y CONFIG_MEMCG=y CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_SWAP_ENABLED=y CONFIG_MEMCG_KMEM=y
3. 以命令列引數方式,在核心啟動時開啟 memory and swap accounting 選項:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
注意:以上只適用於GRUB2。通過檢視/proc/cmdline可以確認命令列引數是否已經成功
傳給核心:
$cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory swapaccount=1
第一步:執行Etcd
docker run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data
第二步:啟動master
docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/dev:/dev \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --pid=host \ --privileged=true \ -d \ gcr.io/google_containers/hyperkube:v1.0.1 \ /hyperkube kubelet --containerized --hostname-override="127.0.0.1" --address="0.0.0.0" --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests
這一步實際上執行的是 kubelet ,並啟動了一個包含其他master元件的[pod](../userguide/pods.md)。
第三步:執行service proxy
docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2
測試
此時你應該已經執行起了一個Kubernetes叢集。你可以下載kubectl二進位制程式進行測試:
(OS X) (linux)
注意: 再OS/X上你需要通過ssh設定埠轉發:
boot2docker ssh -L8080:localhost:8080
列出叢集中的節點:
kubectl get nodes
應該輸出以下內容:
NAME LABELS STATUS 127.0.0.1 Ready
如果你運行了不同的Kubernetes叢集,你可能需要指定 -s http://localhost:8080 選項來訪問本地叢集。
執行一個應用
kubectl -s http://localhost:8080 run nginx --image=nginx --port=80
執行 docker ps 你應該就能看到nginx在執行。下載映象可能需要等待幾分鐘。
暴露為service
kubectl expose rc nginx --port=80
執行以下命令來獲取剛才建立的service的IP地址。有兩個IP,第一個是內部的
(CLUSTER_IP),第二個是外部的負載均衡IP。
kubectl get svc nginx
同樣你也可以通過執行以下命令只獲取第一個IP(CLUSTER_IP):
kubectl get svc nginx --template={{.spec.clusterIP}}
通過第一個IP(CLUSTER_IP)訪問服務:
curl <insert-cluster-ip-here>
注意如果再OSX上需要再boot2docker虛擬機器上執行curl。
關於關閉叢集的說明
上面的各種容器都是執行在 kubelet 程式的管理下,它會保證容器一直執行,甚至容器意外退出時也不例外。所以,如果想關閉叢集,你需要首先關閉 kubelet 容器,再關閉其他。
可以使用 docker kill $(docker ps -aq) 。注意這樣會關閉Docker下執行的所有容器,請謹慎使用。