本文参考Kubernetes官方文章centos_manual_config,介绍如何搭建一个拥有一个控制节点和三个工作节点的Kubernetes集群。
集群节点
192.168.120.121 kube-master
192.168.120.122 kube-node1
192.168.120.123 kube-node2
192.168.120.124 kube-node3
部署前的准备
- 关闭防火墙
# systemctl stop firewalld.service && systemctl disable firewalld.service
- 禁用SELinux
# setenforce 0
# sed -i.bak 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
安装Kubernetes、etcd和flannel
说明:默认安装的CentOS 7.2最小系统即包含可用于安装docker等软件的yum源。
在所有节点上执行以下命令安装Kubernetes等软件:
# yum -y install kubernetes etcd flannel
使用默认的yum源安装的以上软件的版本如下:
# rpm -qa | grep -E 'kube|docker|etcd|flannel'
docker-common-1.12.6-16.el7.centos.x86_64
kubernetes-master-1.5.2-0.5.gita552679.el7.x86_64
docker-1.12.6-16.el7.centos.x86_64
kubernetes-1.5.2-0.5.gita552679.el7.x86_64
flannel-0.7.0-1.el7.x86_64
kubernetes-client-1.5.2-0.5.gita552679.el7.x86_64
docker-client-1.12.6-16.el7.centos.x86_64
kubernetes-node-1.5.2-0.5.gita552679.el7.x86_64
etcd-3.1.3-1.el7.x86_64
Kubernetes软件包提供了一些服务:kube-apiserver,kube-scheduler, kube-controller-manager, kubelet, kube-proxy。这些服务由systemd管理,配置集中保存在/etc/kubernetes目录下。
在控制节点上配置Kubernetes服务
设置kubernetes系统配置
参照以下内容编辑/etc/kubernetes/config:
KUBE_ETCD_SERVERS="--etcd-servers=http://kube-master:2379"
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://kube-master:8080"
配置etcd服务
参照以下内容编辑/etc/etcd/etcd.conf:
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
配置kube-apiserver服务
参照以下内容编辑/etc/kubernetes/apiserver:
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http:// 0.0.0.0:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_ARGS=""
启动kube-apiserver服务
# systemctl start etcd
# systemctl start kube-apiserver
kube-apiserver在启动时根据配置项“–admission-control=…ServiceAccount…”创建证书和私钥文件:
# ls /var/run/kubernetes/
apiserver.crt apiserver.key
配置kube-controller-manager服务
参照以下内容编辑/etc/kubernetes/controller-manager:
KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/var/run/kubernetes/apiserver.key"
配置etcd保存网络覆盖配置
# etcdctl mkdir /kube-centos/network
# etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }"
{ "Network": "172.30.0.0/16", "SubnetLen": 24, "Backend": { "Type": "vxlan" } }
配置flannel服务
参照以下内容编辑/etc/sysconfig/flanneld:
FLANNEL_ETCD="http://kube-master:2379"
FLANNEL_ETCD_KEY="/kube-centos/network
(重新)启动所有的服务
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler flanneld; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
在工作节点上配置Kubernetes服务
设置kubernetes系统配置
参照在Master节点上配置Kubernetes服务的设置kubernetes系统配置部分。
配置kubelet服务
参照以下内容编辑/etc/kubernetes/kubelet:
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
# hostname-override即工作节点主机名,如kube-node1。
KUBELET_HOSTNAME="--hostname-override=kube-node1"
KUBELET_API_SERVER="--api-servers=http://kube-master:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/kubernetes/pause:latest"
KUBELET_ARGS=""
配置flannel服务
参照在Master节点上配置Kubernetes服务的配置flannel服务部分。
启动服务
执行如下命令启动合适的服务:
# for SERVICES in etcd kube-proxy kubelet flanneld docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
配置kubectl
执行以下命令完成kubectl的配置:
# kubectl config set-cluster default-cluster --server=http://kube-master:8080
# kubectl config set-context default-context --cluster=default-cluster --user=default-admin
# kubectl config use-context default-context
在控制节点或工作节点查看集群信息:
# kubectl get nodes
NAME STATUS AGE
kube-node1 Ready 1m
kube-node2 Ready 1m
kube-node3 Ready 1m
至此,完成Kubernetes集群的搭建。