kubernetes集群的解决方案为:使用VMware Workstation Pro,安装3台Centos7 Minimal版(无图形化界面,防止电脑卡顿)的虚拟机。一台作为Master,另外两台作为Node。使用xshell软件操作虚拟机。
基于二进制文件离线安装的记录在kubernetes工作记录(1)——kubernetes1.7.4版集群的离线安装搭建过程记录 中,集成了CA认证、Flannel网络覆盖,经过多人测试,脚本没有问题。
通过xshell,可以使用rz(上传文件)、sz(下载文件)进行文本操作。需要先进行安装。Minimal版也不包括vim,需要自己安装。
yum -y install lrzsz vim
开发中一般最让人头疼的就是环境的搭建,在此,我初步学习了shell脚本的编写,虽然语法比较小白,但已能完成Master和Node服务器的自动安装与配置。下面分别进行记录。脚本中的IP等配置需要自己修改
1)Master端的安装与配置
采用的shell脚本为init-master-test.sh
#!/bin/bash
#关闭防火墙,并关闭防火墙的开机自启动安全的做法是在防火墙上配置各组件需要相互通信的端口号,这里选择直接禁用防火墙。
systemctl stop firewalld
systemctl disable firewalld
#禁用selinux,修改/etc/selinux/config
#SELINUX=enforcing改为SELINUX=disabled
echo "update /etc/selinux/config"
sed -i 's/enforcing/disabled/g' /etc/selinux/config
#安装etcd和kubernetes-master
#etcd为kubernetes集群的主数据库,配置文件通常不需要特别的参数配置,默认将监听127.0.0.1:2379地址供客户端链接使用,shell脚本执行后,可以通过etcdctl cluster-health验证etcd是否正确启动
yum -y install etcd kubernetes-master
#修改apiserver的配置文件/etc/kubernetes/apiserver
#修改-insecure-bind-address(apiserver绑定主机的非安全IP地址,改为masterip表示绑定master地址)
echo "update /etc/kubernetes/apiserver"
sed -i 's!KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"!KUBE_API_ADDRESS="--insecure-bind-address=192.168.121.143"!' /etc/kubernetes/apiserver
#修改kubernetes的配置文件/etc/kubernetes/config
#KUBE_MASTER:指定apiserver的url地址。我的master服务器ip为192.168.121.143
echo "update /etc/kubernetes/config"
sed -i 's!127.0.0.1!192.168.121.143!' /etc/kubernetes/config
systemctl daemon-reload
#让etcd kube-apiserver kube-scheduler kube-controller-manager随开机启动
systemctl enable etcd kube-apiserver kube-scheduler kube-controller-manager
#启动或重启etcd kube-apiserver kube-scheduler kube-controller-manager
systemctl restart etcd kube-apiserver kube-scheduler kube-controller-manager
在root权限下执行脚本。
注意,在执行脚本之前,需要修改脚本里的Master IP地址
注意编码格式,有时脚本执行错误是因为编码格式的原因。如果直接在vim里编辑可以避免,在windows下编辑,自己注意转码。
sh init-master-test.sh
执行完成后,验证Kubernetes Master各个组件的健康状态。我的Master IP为192.168.121.143。
kubectl -s http://192.168.121.143:8080 get componentstatus
如果该指令执行错误,则安装配置过程出现了错误。
至此,Master端算是简易安装配置起来了,覆盖网络、DNS、安全认证等内容以后再研究。
2)Node端的安装与配置
采用的shell脚本为init-node-test.sh
#!/bin/bash
#关闭防火墙,并关闭防火墙的开机自启动
#安全的做法是在防火墙上配置各组件需要相互通信的端口号,这里选择直接禁用防火墙。
systemctl stop firewalld
systemctl disable firewalld
#禁用selinux,修改/etc/selinux/config
#SELINUX=enforcing改为SELINUX=disabled
echo "update /etc/selinux/config"
sed -i 's/enforcing/disabled/g' /etc/selinux/config
#安装kubernetes-node(会自动安装docker)
yum -y install kubernetes-node
#修改kubernetes的配置文件/etc/kubernetes/config
#KUBE_MASTER:指定apiserver的url地址。我的master服务器ip为192.168.121.143
echo "update /etc/kubernetes/config"
sed -i 's!127.0.0.1!192.168.121.143!' /etc/kubernetes/config
#改成网易蜂巢云的镜像源,加速下载docker镜像
echo "update /etc/docker/daemon.json"
sed -i 's!{}!{"registry-mirrors":["http://hub-mirror.c.163.com"],"insecure-registries":["192.168.121.140:5000"]}!' /etc/docker/daemon.json
#修改kubelet的配置文件/etc/kubernetes/kubelet
#修改KUBELET_HOSTNAME,在此我改成了node ip
#修改KUBELET_API_SERVER,我的Master地址为192.168.121.143
echo "update /etc/kubernetes/kubelet"
sed -i 's!KUBELET_HOSTNAME="--hostname-override=127.0.0.1"!KUBELET_HOSTNAME="--hostname-override=192.168.121.144"!' /etc/kubernetes/kubelet
sed -i 's!KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"!KUBELET_API_SERVER="--api-servers=http://192.168.121.143:8080"!' /etc/kubernetes/kubelet
sed -i 's!KUBELET_ARGS=""!KUBELET_ARGS="--cluster_dns=10.254.10.2 --cluster_domain=cluster.local"!' /etc/kubernetes/kubelet
sed -i 's!KUBELET_ADDRESS="--address=127.0.0.1"!KUBELET_ADDRESS="--address=192.168.121.144"!' /etc/kubernetes/kubelet
systemctl daemon-reload
systemctl restart docker kubelet kube-proxy
systemctl enable docker kubelet kube-proxy
root权限下执行脚本。
注意,每个Node在执行脚本之前,需要修改脚本里的Master IP地址,以及KUBELET_HOSTNAME改为Node的HostName,如果HostName不是IP地址的话,需要在Master配置HOST和IP的映射
sh init-node-test.sh
安装部署完成后,在Master上验证运行
kubectl get nodes
至此,Kubernets基本集群搭建完毕。