用Kubeadm-dind单机部署单节点Kubernetes(k8s)
用Kubeadm单机部署单节点k8s1 前言2 环境要求说明3 部署步骤3.1 卸载旧版本Docker3.2 安装Docker3.2.1 安装docker-ce-selinux3.2.2 安装指定版本Docker3.2.3 设置docker镜像3.2.4 重启docker daemon3.3 安装kubectl3.3.1 编辑kubernets.repo3.3.2 安装kubectl3.4 使用k
1 前言
近几年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集群。
2 环境要求说明
- 机器资源:一个VM,2 vCPU 、4GB 内存
- 操作系统:CentOS 7.3或更高
- Docker:17.03或更高
- Kubectl:1.10.5或更高
- 网络:国内由于对很多google的站点进行了屏蔽,很多容器镜像无法直接下载,所以要采用变通的方法,具体描述见本文后面的描述。如果读者有条件的化,可以购买阿里云或者UCloud海外云主机,也可以解决这一问题。
笔者环境:i7-2600(8核),8G,3.10.0-327.el7.x86_64
3 部署步骤
3.1 卸载旧版本Docker
旧版本的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
3.2 安装Docker
这里介绍在CentoOS 7.4上安装Docker 17.03社区版本的方法:
3.2.1 安装docker-ce-selinux
先安装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
3.2.2 安装指定版本Docker
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
3.2.3 设置docker镜像
进入/etc/docker目录,再输入ls查看里面的文件,没有daemon.json文件,那么就自己创建这个文件。
vi daemon.json打开文件,输入下面的josn代码,按Esc退出编辑,最后输入:wq保存并退出。
{
"registry-mirrors":["https://hub-mirror.c.163.com"]
}
3.2.4 重启docker daemon
systemctl stop docker.service
systemctl daemon-reload
systemctl start docker.service
3.3 安装kubectl
3.3.1 编辑kubernets.repo
在/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
3.3.2 安装kubectl
执行如下命令,安装kubectl
yum install kubectl-1.10.5
3.4 使用kubeadm-dind部署单节点k8s集群
在一个单机或一个虚拟机上,可以使用kubeadm-dind部署一个单节点k8s集群,用于开发和测试。下面是具体的方法:
3.4.1 下载kubeadm-dind安装脚本
wget https://cdn.rawgit.com/kubernetes-sigs/kubeadm-dind-cluster/master/fixed/dind-cluster-v1.10.sh
下载不了的童鞋,后面我会把连接提供给大家!
3.4.2 设置脚本执行权限
chmod +x dind-cluster-v1.10.sh
3.4.3 设置环境变量
export NUM_NODES=0 #除master外的工作节点个数,由于我们是单节点,只保留master即可
export CNI_PLUGIN=flannel
export DASHBOARD_URL="kubernetes-dashboard.yaml"
3.4.4 修改dashboard部署文件
在使用dind-cluster-v1.10.sh拉起k8s集群时,需要修改kubernetes-dashboard.yaml的定义
- 先下载kubernetes-dashboard.yaml
wget https://rawgit.com/kubernetes/dashboard/bfab10151f012d1acc5dfb1979f3172e2400aa3c/src/deploy/kubernetes-dashboard.yaml
下载不了的童鞋,后面我会把连接提供给大家
- 修改kubernetes-dashboard.yaml
把imagePullPolicy: Always修改为imagePullPolicy: IfNotPresent
imagePullPolicy: IfNotPresent
3.4.5 执行脚本部署集群
./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镜像。
脚本代码如下:
- geti.sh文件(被do_getm.sh脚本调用,在master节点上下载k8s相关镜像,解决google被屏蔽问题)
#!/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
- do_getm.sh文件(在宿主机节点上执行)
#!/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
4.问题总结
4.1 docker仓库
这里用的是keveon的docker仓库, 可以解决国内用户不能正确下载镜像的问题。
4.2 关于dashboard版本
实测:
1.6.0 英文界面
1.6.3 中文界面
1.8.3 中文界面
>>可以通过修改kubernetes-dashboard.yaml,geti.sh中的版本号实现对dashboard版本的修改!
4.3 解决dashboard服务起来后,访问不了的问题
此例中使用的是Nodeport方式。
现象:
- 通过命令kubectl get pod -n kube-system 可以发现dashboard已经处于running状态
- 进入master节点里面,发现可以访问10.244.0.5:9090。
- 宿主机ping不通10.244.0.5
- 查看路由发现没有10.244.0.0/24的路由
解决:
- 添加一条到node里面的路由
route add -net 10.244.0.0 netmask 255.255.255.0 gw 10.192.0.2
- 添加dnat
iptables -t nat -A PREROUTING -d 172.18.100.228 -p tcp -m tcp --dport 30001 -j DNAT --to-destination 10.244.0.5:9090
4.4 安装失败,如何重新安装?
执行下面命令:
./dind-cluster-v1.10.sh down #关闭所有节点
./dind-cluster-v1.10.sh clean #清理
5.参考
6.其他比较不错的资料(待验证)
更多推荐
所有评论(0)