在CentOS 7.2上部署Kubernetes集群

在CentOS 7.2上部署Kubernetes集群

2017年05月26日 16:21:11

阅读数:1794

本文参考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
  • 1
  • 2
  • 3
  • 4
  • 5

部署前的准备

  • 关闭防火墙
# systemctl stop firewalld.service && systemctl disable firewalld.service
  • 1
  • 禁用SELinux
# setenforce 0
# sed -i.bak 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
  • 1
  • 2

安装Kubernetes、etcd和flannel

说明:默认安装的CentOS 7.2最小系统即包含可用于安装docker等软件的yum源。 
在所有节点上执行以下命令安装Kubernetes等软件:

# yum -y install kubernetes etcd flannel
  • 1

使用默认的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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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"
  • 1
  • 2
  • 3
  • 4
  • 5

配置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"
  • 1
  • 2
  • 3
  • 4

配置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=""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

启动kube-apiserver服务

# systemctl start etcd
# systemctl start kube-apiserver
  • 1
  • 2

kube-apiserver在启动时根据配置项“–admission-control=…ServiceAccount…”创建证书和私钥文件:

# ls /var/run/kubernetes/
apiserver.crt  apiserver.key
  • 1
  • 2

配置kube-controller-manager服务

参照以下内容编辑/etc/kubernetes/controller-manager:

KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/var/run/kubernetes/apiserver.key"
  • 1

配置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" } }
  • 1
  • 2
  • 3

配置flannel服务

参照以下内容编辑/etc/sysconfig/flanneld:

FLANNEL_ETCD="http://kube-master:2379"
FLANNEL_ETCD_KEY="/kube-centos/network
  • 1
  • 2

(重新)启动所有的服务

# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler flanneld; do
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES
done
  • 1
  • 2
  • 3
  • 4
  • 5

在工作节点上配置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=""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

配置flannel服务

参照在Master节点上配置Kubernetes服务的配置flannel服务部分。

启动服务

执行如下命令启动合适的服务:

# for SERVICES in etcd kube-proxy kubelet flanneld docker; do
        systemctl restart $SERVICES
        systemctl enable $SERVICES
        systemctl status $SERVICES
done
  • 1
  • 2
  • 3
  • 4
  • 5

配置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
  • 1
  • 2
  • 3

在控制节点或工作节点查看集群信息:

# kubectl get nodes
NAME         STATUS    AGE
kube-node1   Ready     1m
kube-node2   Ready     1m
kube-node3   Ready     1m
  • 1
  • 2
  • 3
  • 4
  • 5

至此,完成Kubernetes集群的搭建。

猜你喜欢

转载自blog.csdn.net/wangshuminjava/article/details/81177961