停住你的脚步。现在开始,在本地环境下推荐使用利用 Minikube 运行 Kubernetes 了。
下面将介绍,如果使用 Docker 搭建一个单点 kubernetes 群集。
下面是最终示意图:
注意: 下面这些步骤没有经过Docker For Mac 和 Docker For Windows的验证。
在 systemd 的情况下,更改 Docker 挂载标识为共享
DOCKER_CONF=$(systemctl cat docker | head -1 | awk '{print $2}')
sed -i.bak 's/^\(MountFlags=\).*/\1shared/' $DOCKER_CONF
systemctl daemon-reload
systemctl restart docker
除此以外,使用 Hyperkube 手动设置安装点为共享:
mkdir -p /var/lib/kubelet
mount --bind /var/lib/kubelet /var/lib/kubelet
mount --make-shared /var/lib/kubelet
${K8S_VERSION}
variable to a version of Kubernetes >= “v1.2.0”.如果你要使用 稳定版 的 Kubernetes,则运行:
export K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/stable.txt)
最新版本 (包含不稳定版本):
export K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/latest.txt)
export ARCH=amd64
docker run -d \
--volume=/sys:/sys:rw \
--volume=/var/lib/docker/:/var/lib/docker:rw \
--volume=/var/lib/kubelet/:/var/lib/kubelet:rw,shared \
--volume=/var/run:/var/run:rw \
--net=host \
--pid=host \
--privileged \
--name=kubelet \
gcr.io/google_containers/hyperkube-${ARCH}:${K8S_VERSION} \
/hyperkube kubelet \
--hostname-override=127.0.0.1 \
--api-servers=http://localhost:8080 \
--config=/etc/kubernetes/manifests \
--cluster-dns=10.0.0.10 \
--cluster-domain=cluster.local \
--allow-privileged --v=2
注意
--cluster-dns
和--cluster-domain
是用来部署 dns 的, 如果不需要 dns 的话可以不设置。
如果你想要装在一个外部设备作为volume(卷)来使用的话,需要添加
--volume=/dev:/dev
到上面。 然而它可能会导致出现一些问题#18230
amd64
以外的架构,有可能不稳定, 但如果你想尝试一下的话,可以设置为arm
,arm64
或者ppc64le
。 Kubernetesv1.3.0-alpha.2
以上的版本才开始支持 ARM. ARM 64-bit 和 PowerPC 64 需要v1.3.0-alpha.3
或更高版本。 在这查看·multi-arch·支持进度
If you are behind a proxy, you need to pass the proxy setup to curl in the containers to pull the certificates. Create a .curlrc under /root folder (because the containers are running as root) with the following line:
proxy = <your_proxy_server>:<port>
This actually runs the kubelet, which in turn runs a pod that contains the other master components.
** 安全警告 ** services exposed via Kubernetes using Hyperkube are available on the host node’s public network interface / IP address. Because of this, this guide is not suitable for any host node/server that is directly internet accessible. Refer to #21735 for addtional info.
kubectl
这时候你应该运行了一个 Kubernetes 群集。你可以下载${K8S_VERSION}
版本的kubectl来进行测试。(本示例使用: v1.3.0
).
下载:
linux/amd64
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/linux/amd64/kubectllinux/386
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/linux/386/kubectllinux/arm
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/linux/arm/kubectllinux/arm64
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/linux/arm64/kubectllinux/ppc64le
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/linux/ppc64le/kubectlOS X/amd64
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/darwin/amd64/kubectlOS X/386
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/darwin/386/kubectlwindows/amd64
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/windows/amd64/kubectl.exewindows/386
: http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/windows/386/kubectl.exe通用下载路径:
http://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/${GOOS}/${GOARCH}/${K8S_BINARY}
linux/amd64
的一个安装例子:
curl -sSL "https://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/linux/amd64/kubectl" > /usr/bin/kubectl
chmod +x /usr/bin/kubectl
On OS X, to make the API server accessible locally, setup a ssh tunnel.
docker-machine ssh `docker-machine active` -N -L 8080:localhost:8080
Setting up a ssh tunnel is applicable to remote docker hosts as well.
(Optional) Create kubernetes cluster configuration:
kubectl config set-cluster test-doc --server=http://localhost:8080
kubectl config set-context test-doc --cluster=test-doc
kubectl config use-context test-doc
列出群集中的 node(节点)
kubectl get nodes
应该会打印出:
NAME STATUS AGE
127.0.0.1 Ready 1h
kubectl run nginx --image=nginx --port=80
由于下载镜像需要花上几分钟,过一会运行 docker ps
你会看到 nginx 正在运行。
kubectl expose deployment nginx --port=80
运行一下命令,来获取我们刚刚创建的群集的 service 的 IP 地址:
ip=$(kubectl get svc nginx --template={{.spec.clusterIP}})
echo $ip
在浏览器中输入这个 IP:
curl $ip
在 macOS 中,使用以下命令,访问虚拟机中的 Docker:
docker-machine ssh `docker-machine active` curl $ip
说明看 这 。
1. 删除 Nginx 服务和 deployment:
If you plan on re-creating your nginx deployment and service you will need to clean it up.
kubectl delete service,deployments nginx
2. Delete all the containers including the kubelet:
docker rm -f kubelet
docker rm -f `docker ps | grep k8s | awk '{print $1}'`
3. 清理文件系统:
在 macOS 中,需要先通过 ssh 连接到 docker 虚拟机:
docker-machine ssh `docker-machine active`
grep /var/lib/kubelet /proc/mounts | awk '{print $2}' | sudo xargs -n1 umount
sudo rm -rf /var/lib/kubelet
NotReady
状态如果你发现你的 node (节点)的状态是 NotReady
,那么他可能是因为你的系统不具备 memcg 而导致的。
memory accounting
,输入一下命令来开启它:CONFIG_RESOURCE_COUNTERS=y
CONFIG_MEMCG=y
memory accounting
的命令:GRUB_CMDLINE_LINUX="cgroup_enable=memory=1"
注意:以上只适用于GRUB2。
通过查看 /proc/cmdline
可以确认命令行参数是否已经成功传给内核:
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory=1
IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level |
---|---|---|---|---|---|---|
Docker Single Node | custom | N/A | local | docs | Project (@brendandburns) |
所有解决方案及支持级别的信息,请参阅解决方案表格 .
更多详细的使用和管理 Kubernetes 群集相关的信息,请看 Kubernetes 文档