双机环境部署Kubernetes
本文使用kubeadm在虚机上部署一master一node的Kubernetes(k8s)集群。
0x01 环境
首先是创建环境,笔者使用的是两台8核8G内存的虚机,系统是Ubuntu 16.04。具体配置信息如下:
{
"accountId": 278444,
"createDate": "2017-08-25T13:04:47+08:00",
"domain": "softlayer.com",
"fullyQualifiedDomainName": "kube-master-ed.softlayer.com",
"hostname": "kube-master-ed",
"id": 38195879,
"lastPowerStateId": null,
"lastVerifiedDate": null,
"maxCpu": 8,
"maxCpuUnits": "CORE",
"maxMemory": 8192,
"metricPollDate": null,
"modifyDate": null,
"provisionDate": null,
"startCpus": 8,
"statusId": 1001,
"uuid": "d81932a1-cfd5-4a22-8599-7932f5774e74",
"globalIdentifier": "4aee1c95-a1fc-4693-a086-bb6eaa55e30c"
}
master_ip
是10.112.116.123
,node1_ip
是10.113.205.195
。接下来的2~3步的安装部署都要在两台VM上执行。
0x02 安装Docker
Docker有很多发行版本,我选择的是17.06.1-ce版本。具体安装过程如下:
# Add repo key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
# Install docker-ce
sudo apt-get install docker-ce
0x03 安装kube命令行相关工具
k8s相关的工具包括:kubectl是kubernets的命令行工具,kubelet是kubernetes中的worker组件,负责在各个节点上收集信息和执行任务。kubeadm工具提供一键部署k8s的方法。
# Install kubectl
sudo snap install kubectl --classic
# Install kubelet, kubeadm
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm
0x04 配置Cluter环境
使用kubeadm init
来初始化master环境,CIDR options是为了接下来的pod network add-on做准备。
kubeadm init --pod-network-cidr=192.168.0.0/16 --skip-preflight-checkskubeadm init --pod-network-cidr=192.168.0.0/16
如果成功启动,可以看到如何加入cluster的方法:kubeadm join --token <token> <master-ip>:<master-port>
。
接着部署网络,我选择的network add-on是Calico。直接部署pods即可:
kubectl apply -f http://docs.projectcalico.org/v2.4/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
等待新加入的pod和kube-dns状态转换为Running
时,就表明网络配置成功。
这个时候切换到node1机器上,使用kubeadm
将node1节点加入到cluster中。
kubeadm join --token d8fb64.052e0bf570346675 169.50.70.124:6443
当成功执行后,再切换回master查看node情况。
kubectl get nodes
可以看到,node1已经成功加入到cluster当中。
0x05 Test
kubectl create namespace sock-shop
kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
等待相关的pod成功创建,可以看到这个pod都部署在了node1机器上。
我们使用 kubectl -n sock-shop get svc front-end
查看前端的端口。
然后测试一下结果。
整个部署的过程十分简单和顺利。