基于Docker本地運(yùn)行Kubernetes

譯者:razr

概覽

下面的指引將高速你如何通過Docker創(chuàng)建一個單機(jī)、單節(jié)點(diǎn)的Kubernetes集群。

下圖是最終的結(jié)果:

先決條件

1. 你必須擁有一臺安裝有Docker的機(jī)器。

2. 你的內(nèi)核必須支持 memory and swap accounting 。確認(rèn)你的linux內(nèi)核開啟了如下配置:

CONFIG_RESOURCE_COUNTERS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y
CONFIG_MEMCG_KMEM=y

3. 以命令行參數(shù)方式,在內(nèi)核啟動時開啟 memory and swap accounting 選項:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

注意:以上只適用于GRUB2。通過查看/proc/cmdline可以確認(rèn)命令行參數(shù)是否已經(jīng)成功

傳給內(nèi)核:

$cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory
swapaccount=1

第一步:運(yùn)行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

這一步實(shí)際上運(yùn)行的是 kubelet ,并啟動了一個包含其他master組件的[pod](../userguide/pods.md)。

第三步:運(yùn)行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

測試

此時你應(yīng)該已經(jīng)運(yùn)行起了一個Kubernetes集群。你可以下載kubectl二進(jìn)制程序進(jìn)行測試:

(OS X) (linux)

注意: 再OS/X上你需要通過ssh設(shè)置端口轉(zhuǎn)發(fā):

boot2docker ssh -L8080:localhost:8080

列出集群中的節(jié)點(diǎn):

kubectl get nodes

應(yīng)該輸出以下內(nèi)容:

NAME LABELS STATUS
127.0.0.1 Ready

如果你運(yùn)行了不同的Kubernetes集群,你可能需要指定 -s http://localhost:8080 選項來訪問本地集群。

運(yùn)行一個應(yīng)用

kubectl -s http://localhost:8080 run nginx --image=nginx --port=80

運(yùn)行 docker ps 你應(yīng)該就能看到nginx在運(yùn)行。下載鏡像可能需要等待幾分鐘。

暴露為service

kubectl expose rc nginx --port=80

運(yùn)行以下命令來獲取剛才創(chuàng)建的service的IP地址。有兩個IP,第一個是內(nèi)部的

(CLUSTER_IP),第二個是外部的負(fù)載均衡IP。

kubectl get svc nginx

同樣你也可以通過運(yùn)行以下命令只獲取第一個IP(CLUSTER_IP):

kubectl get svc nginx --template={{.spec.clusterIP}}

通過第一個IP(CLUSTER_IP)訪問服務(wù):

curl <insert-cluster-ip-here>

注意如果再OSX上需要再boot2docker虛擬機(jī)上運(yùn)行curl。

關(guān)于關(guān)閉集群的說明

上面的各種容器都是運(yùn)行在 kubelet 程序的管理下,它會保證容器一直運(yùn)行,甚至容器意外退出時也不例外。所以,如果想關(guān)閉集群,你需要首先關(guān)閉 kubelet 容器,再關(guān)閉其他。

可以使用 docker kill $(docker ps -aq) 。注意這樣會關(guān)閉Docker下運(yùn)行的所有容器,請謹(jǐn)慎使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容