Centos 7 搭建最新版 Kubernetes(10.1)集群

目前基于容器管理的Kubernetes 已经占住了80%的市场份额,基本上以成为该领域的标准,由于国内网络环境的影响,让kubernetes搭建成了一道技术难题,下面就一步一步教大家如何去搭建kubernetes集群,本文所有的组件均采用的是最新版。

Centos 7 搭建最新版 Kubernetes(10.1)集群_第1张图片

一、kubeadm 介绍

Kubernetes 是 Google 开源的基于 Docker 的容器集群管理系统,通过 yaml 语言写的配置文件,简单快速的就能自动部署好应用环境,支持应用横向扩展,并且可以组织、编排、管理和迁移这些容器化的应用。Kubeadm 是一个可以快速帮助我们创建稳定集群服务的工具,通过它,我们可以在虚拟机、实体机或者云端快速部署一个高可用的集群服务。

二、环境、软件准备

安装之前,先介绍下 Kubeadm 安装 kubernetes 需要的一些基本硬件要求。

  • 系统要求,支持的系统 Ubuntu 16.04+、 CentOS 7 、HypriotOS v1.0.1+

  • 内存要求,每台机器至少要有 1GB 内存,否则集群启动后,留给运行的应用可用内存就很少了。

  • 网络要求,保证集群内所有机器之前的网络是可以互相连通的。

本次演示我准备了两台系统为 CentOS Linux 7 (Core) 的虚拟机,一台作为 Master,一台作为 Node,默认 Master 机器不参与 Pod 调度。集群机器信息如下:

Centos 7 搭建最新版 Kubernetes(10.1)集群

三、初始化工作


1、安装 ebtables ethtool,否则后边执行 kubeadm init 的时候会报错。

yum install ebtables ethtool

2、修改网络开启桥接网络支持,只针对(RHEL/CentOS 7)系统。

vim /usr/lib/sysctl.d/00-system.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

3、关闭 SELinux,目的为了允许容器能够与本机文件系统交互。

$ setenforce 0

$ systemctl daemon-reload

4、修改节点的 hostname,因为 kubernetes 是根据 hostname 来标示各节点的。

# Master 节点

$ echo "master.localdomain" > /etc/hostname

$ echo "10.236.65.125 master.localdomain" >> /etc/hosts

$ sysctl kernel.hostname=master.localdomain # 不重启情况下使内核修改生效

5、关闭swapoff

swapoff -a

四、软件安装配置

我们知道 kubernetes 环境底层是依赖 Docker 的,所以这里软件安装包括了 Docker 安装, kubelet、kubeadm、kubectl 组件安装,以及一些初始化配置工作。

Master 和 Node 节点由于分工不一样,所以安装的服务不同,最终安装完毕,Master 和 Node 启动的核心服务分别如下:

Centos 7 搭建最新版 Kubernetes(10.1)集群_第2张图片

五、镜像准备

针对国内镜像环境,我指定了一个脚本,执行该脚本即可,pull 不下来多执行几次就好了

#!/bin/bash

images=(kube-proxy-amd64:v1.10.1 kube-scheduler-amd64:v1.10.1 kube-controller-manager-amd64:v1.10.1 kube-apiserver-amd64:v1.10.1

etcd-amd64:3.2.18 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.10 k8s-dns-kube-dns-amd64:1.14.10

k8s-dns-dnsmasq-nanny-amd64:1.14.10)

for imageName in ${images[@]} ; do

docker pull longhuixuan/$imageName

docker tag longhuixuan/$imageName k8s.gcr.io/$imageName

docker rmi longhuixuan/$imageName

done

六、安装 Docker

每台机器都需要安装 Docker,我这里安装的是1.13版本。

$ yum install -y docker

# 设置开启启动并启动服务

$ systemctl enable docker && systemctl start docker

如出现以下错误

Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in docker (--selinux-enabled=false)

vim /etc/sysconfig/docker

# Modify these options if you want to change the way the docker daemon runs

OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'

if [ -z "${DOCKER_CERT_PATH}" ]; then

DOCKER_CERT_PATH=/etc/docker

fi

修改Docker cgroup 的驱动为 cgroupfs

$ vim /usr/lib/systemd/system/docker.service

cgroupdriver=cgroupfs

七、安装并配置 kubernetes 组件

需要安装的 kubernetes 组件主要有 kubelet、kubeadm、kubectl 这几个。针对可以的用户可以 yum 配置 kubernetes 官方源:

vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

#gpgcheck=1

gpgcheck=0

#设置完成后,安装kubelet、kubeadm、kubectl 组件

$ yum install -y kubelet kubeadm kubectl

# 设置开机启动,以及启动各组件

$ systemctl enable kubelet && systemctl start kubelet

安装完毕后,我们还需要配置一下 kubelet,主要修改配置文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf中的 KUBELET_CGROUP_ARGS=cgroupfs配置。

这里要特别强调一下,一定要修改kubelet 和 docker 的驱动为cgroupfs,修改后 reload 一下服务

$ systemctl daemon-reload

八、初始化启动 Master

kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.96.0.0/12

配置完主机后,我们可以启动 Master 节点了。在执行初始化 init 时,kubernetes 并没有选择默认的 Pod Network,它支持很多种,这里我们选择 Flannel 作为 Pod Network,按照文档说明,执行 init 时,需要带上参数 --pod-network-cidr,即指定网络区间,同时我们也可以通过 --kubernetes-version指定选择 kubernetes 的版本号

九、在master 节点下安装 Flannel 网络组件

kubernetes 提供了很多种网络组件选择,有 Calia、Canal、Flannel、Kube-router、Romana、Weave Net 可以使用,具体使用可以参考 官方文档 (3/4) Installing a pod network 来操作,这里我们选择 Flannel 作为网络组件。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.0/Documentation/kube-flannel.yml

安装完毕后,我们稍等一会再来查看下 pod 列表,看是不是都是Running状态。

Centos 7 搭建最新版 Kubernetes(10.1)集群_第3张图片

十、安装kubernates-dashboard

1、生成证书

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

openssl req -newkey rsa:4096 -nodes -sha256 -keyout weishuichao.key -out weishuichao.csr

openssl x509 -req -in weishuichao.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out weishuichao.crt

2、导入证书到kube-system

kubectl create secret generic kubernetes-dashboard-certs --from-file=/data/cert -n kube-system

3、创建kubernetes-dashboard.yaml

kubectl apply -f /data/k8s/kubernetes-dashboard.yaml

配置在官网的基础上需要加上下面配置ClusterRoleBinding,用以配置权限,这样通过token登陆进去才不至于没有权限

# ------------------- Dashboard ClusterRoleBinding ------------------- #

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: kubernetes-dashboard

subjects:

- kind: ServiceAccount

name: kubernetes-dashboard

namespace: kube-system

roleRef:

kind: ClusterRole

name: cluster-admin

apiGroup: rbac.authorization.k8s.io

kubernetes采用暴露端口的方式使用,增加一下配置

Centos 7 搭建最新版 Kubernetes(10.1)集群_第4张图片

4、获取kube-system 的secret

kubectl -n kube-system get secret

5、查看token,这个token 是用于登陆使用的

kubectl -n kube-system describe secret kubernetes-dashboard-token-2qmtr

6、访问dashboard

https://192.168.2.107:31000 输入令牌,进入dashboard主页

Centos 7 搭建最新版 Kubernetes(10.1)集群_第5张图片

十一、建立机器互信

1、在每台服务器需要建立主机互信的用户名执行以下命令生成公钥/密钥,默认回车即可

$
 ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in 
which to save the key (/root/.ssh/id_rsa):Created directory 
'/root/.ssh'.Enter passphrase (empty for no passphrase):Enter same 
passphrase again:Your identification has been saved in 
/root/.ssh/id_rsa.Your public key has been saved in 
/root/.ssh/id_rsa.pub.The key fingerprint 
is:0c:1f:76:aa:80:b2:2f:b9:9a:6a:48:96:9d:8f:a1:cc root@cctvyyycns04The 
key's randomart image is:+--[ RSA 2048]----+| || || . o . || . = + ||. +
 o S || * + . . ||B.. + . ||+E . . ||Oo. |+-----------------+

2、互传公钥,第一次需要输入密码,之后就OK了

$ ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

可以看到是在.ssh/下生成了个authorized_keys的文件,记录了能登陆这台服务器的其他服务器的公钥

3、测试是否能登陆

$ ssh 192.168.199.132

十二、生成join token

kubeadm token create --print-join-command

把Node加入到master中去

kubeadm join 192.168.2.107:6443 --token uakb7l.mg4j5vprx87o1w4c --discovery-token-ca-cert-hash sha256:a0f50e9bb2fe44511b2ad068e65a1c903ab08cac0aa4329a0c1c70aff57b9cc0

你可能感兴趣的:(k8s,Linux)