近几年Google的Kubernetes(简称k8s)已经成为分布式容器编排和管理领域事实上的标准,在基于容器的微服务架构下的分布式应用开发、部署和运维管理等领域,会有越来越多的用户部署和使用k8s平台。对于初学着来说,部署一个多机k8s集群一来缺少环境、另外也相对比较复杂。为了满足用户尝试和使用的便利性需要,可以使用两种方法在一个单机环境下(物理机或者虚拟机)部署一个k8s环境:
Minikube: 这种方式是Google推荐的本地(单机)部署方法,它在一个虚拟机(或物理机)上部署一个单节点k8s集群,用于开发或测试。
kubeadm-dind: 这种方式是在一个虚拟机(或物理机)上部署一个多节点k8s集群(Minikube是单节点),它要求在虚拟机上有一个docker daemon运行。kubeadm-dind使用docker-in-docker(简称DinD)技术在虚拟机上首先以容器的方式启动k8s的多个节点(master节点和多个woker node节点),然后在节点内部再启动若干容器运行k8s相应的组件以完成部署一个k8s集群。
旧版本的Docker命名为docker或docker-engine,如果有安装旧版本,先卸载旧版本
sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
这里介绍在CentoOS 7.4上安装Docker 17.03社区版本的方法:
先安装docker-ce-selinux,否则会报错。
yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
systemctl enable docker.service
systemctl start docker.service
进入/etc/docker目录,再输入ls查看里面的文件,没有daemon.json文件,那么就自己创建这个文件。
vi daemon.json打开文件,输入下面的josn代码,按Esc退出编辑,最后输入:wq保存并退出。
{
"registry-mirrors":["https://hub-mirror.c.163.com"]
}
systemctl stop docker.service
systemctl daemon-reload
systemctl start docker.service
在/etc/yum.repos.d目录中编辑kubernets.repo文件,内容如下:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
执行如下命令,安装kubectl
yum install kubectl-1.10.5
在一个单机或一个虚拟机上,可以使用kubeadm-dind部署一个单节点k8s集群,用于开发和测试。下面是具体的方法:
wget https://cdn.rawgit.com/kubernetes-sigs/kubeadm-dind-cluster/master/fixed/dind-cluster-v1.10.sh
下载不了的童鞋,后面我会把连接提供给大家!
chmod +x dind-cluster-v1.10.sh
export NUM_NODES=0 #除master外的工作节点个数,由于我们是单节点,只保留master即可
export CNI_PLUGIN=flannel
export DASHBOARD_URL="kubernetes-dashboard.yaml"
在使用dind-cluster-v1.10.sh拉起k8s集群时,需要修改kubernetes-dashboard.yaml的定义
wget https://rawgit.com/kubernetes/dashboard/bfab10151f012d1acc5dfb1979f3172e2400aa3c/src/deploy/kubernetes-dashboard.yaml
下载不了的童鞋,后面我会把连接提供给大家
imagePullPolicy: IfNotPresent
./dind-cluster-v1.10.sh up
注意:在执行dind-cluster-v1.10.sh时,会在kube-master节点和kube-node-n节点上下载k8s相应的某些镜像。如果是国内用户,由于网络屏蔽的原因,这时就需要在dind-cluster脚本执行到某个特定时候执行下面的脚本下载镜像(如果是国外的主机,则不需要执行)。下图是在宿主机上的脚本目录情况:
在宿主机上执行上图中的dind-cluster-v1.10.sh时,当部署进展到提示 " [init] This often takes around a minute; or longer if the control plane images have to be pulled." 时,需要执行do_getm.sh脚本,让master节点下载需要的k8s镜像。
脚本代码如下:
#!/bin/bash
db_ver=v1.6.0
docker pull quay.io/coreos/flannel:v0.10.0-amd64
images=(etcd-amd64:3.1.12 pause-amd64:3.1 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8 k8s-dns-dnsmasq-nanny-amd64:1.14.8 kubernetes-dashboard-amd64:$db_ver)
for imageName in ${images[@]} ; do
docker pull keveon/$imageName
docker tag keveon/$imageName k8s.gcr.io/$imageName
docker rmi keveon/$imageName
done
docker tag k8s.gcr.io/kubernetes-dashboard-amd64:$db_ver gcr.io/google_containers/kubernetes-dashboard-amd64:$db_ver
docker rmi k8s.gcr.io/kubernetes-dashboard-amd64:$db_ver
#!/bin/bash
master_id=$(docker ps | grep -i master | awk '{print $1}')
docker cp geti.sh ${master_id}:/root
docker exec ${master_id} /root/geti.sh
这里用的是keveon的docker仓库, 可以解决国内用户不能正确下载镜像的问题。
实测:
1.6.0 英文界面
1.6.3 中文界面
1.8.3 中文界面
>>可以通过修改kubernetes-dashboard.yaml,geti.sh中的版本号实现对dashboard版本的修改!
此例中使用的是Nodeport方式。
现象:
解决:
route add -net 10.244.0.0 netmask 255.255.255.0 gw 10.192.0.2
执行下面命令:
./dind-cluster-v1.10.sh down #关闭所有节点
./dind-cluster-v1.10.sh clean #清理