前言
docker用多了会上瘾!最近把之前做的所有服务全部都容器化了,但是分散管理太麻烦,总不能一个一个的命令敲吧。所以今天我就把手头上仅有的两台aws服务器用rancher部署一下kubernetes集群。
正文
其实相当简单,命令都没几个。如果使用kops的话,填一下key和secret,然后根据需要更改一下配置,之后create就可以直接部署好k8s集群。因为我本地有三台机器,所以还是简单介绍一下几个命令。首先是创建ec2,选择镜像的时候最好选择ubuntu。如果使用的是aws的centos的话,需要将cgroup的挂载点改一下。以下是原回答:
On Amazon Linux I successfully tested Amazon Linux 2017.09 and Docker
17.06 (default yum install) by changing the mount from /sys:/sys:ro to /
cgroup:/sys/fs/cgroup:ro. Let me know what versions are being used if
this doesn't work.
建好了ec2以后,需要将服务器和安全组打好标签,key为kubernetes.io/cluster/XXXX其中的XXXX为任意字符但是在每台机器上都必须一致。value为owned。打好tag以后,挑一台服务器做为rancher的主机,使用如下命令:
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
建好rancher之后,设置一下密码,有域名的可以绑定一下域名在命令后面加上--acme-domain www.yourdomain.com。然后点击Global-Add Cluster创建k8s集群。因为我们已经申请好了主机,所以选择CUSTOM (From my own existing nodes)然后选择下一步然后显示的命令再另外选择的主机上运行一下就可以了。
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.1.5 --server https://www.XXXXXXX.com --token XXXXXXXXXXXX --etcd --controlplane --worker
我的三台机器,一台运行rancher,一台作为上面k8s的master机器,还一台我决定再跑个k8s的worker。再最后一台机器上运行刚才的命令,只是role选择--worker就可以了。至此k8s的集群就创建完了,如果不想用rancher,可以把rancher停掉,不影响k8s的使用。
创建完集群之后,我们可以在本地安装kubectl,将Cluster: your-cluster-name标签下将Kubeconfig File复制到本地的~/.kube/config下,就可以远程的管理集群及相关应用了。使用kubectl来创建pods,只需要先编写好相关的yaml文件,然后运行kubectl create -f xxxx.yaml就可以了!!
如果要向外部暴露服务器的也很简单,先部署一个Deployment在ports下暴露containerPort比如5000。然后在部署一个Service-selector-app选择我们刚才写的Deployment,再将targetPort选择我们刚才暴露的端口5000,再设置一下service port比如还是5000,type选择ClusterIP。最后再部署一个ingress将backend-serviceName和servicePort分别设置为刚才的service名字及端口。域名可以绑定任何一台k8s机器的ip。我这里是直接绑定*.mydomain.com。所以这里的host设置为api.mydomain.com.这样完成了对外服务的部署。
部署其他的工具例如rabbitmq·mysql·等等也很简单,我使用helm来部署,首先将Global-Catalogs-Helm Stable打开。然后选择自己的project-Catalog Apps-Launch-选择自己需要的工具。进去之后拉倒最下面PREVIEW将values.yaml下载到本地,更改必要的参数。然后运行helm install --name my-release -f values.yaml stable/XXXXX就可以了!!简单方便有木有!!!