kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

1、传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

2、新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

3、容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

kubernetes搭建HDFS kubernetes 部署_kubernetes搭建HDFS


kubernetes搭建HDFS kubernetes 部署_初始化_02


kubernetes搭建HDFS kubernetes 部署_kubernetes搭建HDFS_03


kubernetes搭建HDFS kubernetes 部署_docker_04


kubernetes搭建HDFS kubernetes 部署_docker_05

一、实验环境部署操作步骤:

1、在真机上面搭建共享yum源,含有docker的安装包

kubernetes搭建HDFS kubernetes 部署_kubernetes搭建HDFS_06


kubernetes搭建HDFS kubernetes 部署_kubernetes搭建HDFS_07


2、在server1上配置本地yum源,server2、server3是一样的

[root@server1 ~]# cat /etc/yum.repos.d/docker-ce.repo 
[docker]
name=docker-ce
baseurl=http://172.25.1.250/docker
gpgcheck=0
[root@server1 yum.repos.d]# yum repolist		#查看配置成功

kubernetes搭建HDFS kubernetes 部署_docker_08


kubernetes搭建HDFS kubernetes 部署_kubernetes搭建HDFS_09


kubernetes搭建HDFS kubernetes 部署_运维_10


3、查看各个节点的解析

vim /etc/hosts

4、在server1、server2、server3上面安装docker服务,并且开启

yum install docker-ce -y
[root@server1 yum.repos.d]# systemctl start docker
[root@server1 yum.repos.d]# systemctl enable docker
[root@server1 yum.repos.d]# systemctl status docker

kubernetes搭建HDFS kubernetes 部署_运维_11


二、部署一个基本的k8s集群

1、禁用 swap 分区:(三台主机)

注释掉/etc/fstab 文件中的 swap 定义

server124:
[root@server1 yum.repos.d]# swapoff -a
[root@server1 yum.repos.d]# vim /etc/fstab

kubernetes搭建HDFS kubernetes 部署_初始化_12


2、下载rpm安装包(三台主机)

下载地址:

https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64/repodata/primary.xml https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.3e221b11fbjEYj

server124

vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

yum clean all

setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

kubernetes搭建HDFS kubernetes 部署_初始化_13


3、修改 sysctl 配置*(三台主机均设置)

对于 RHEL/CentOS 7 系统,可以会由于 iptables 被绕过导致网络请求被错误的路由。所以还需执行如下命令保证 sysctl 配置中 net.bridge.bridge-nf-call-iptables 被设为1。

[root@server1 ~]# vim /etc/sysctl.d/k8s.conf
[root@server1 ~]# cat /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

kubernetes搭建HDFS kubernetes 部署_docker_14


kubernetes搭建HDFS kubernetes 部署_初始化_15

三、Master 节点的安装配置
1、在server1(master节点)上面初始化集群

注意:–pod-network-cidr=10.244.0.0/16 是 k8s 的网络插件所需要用到的配置信息,用来给 node 分配子网段。然后我们这边用到的网络插件是 flannel,就是这么配。

kubeadm init --pod-network-cidr=10.244.0.0/16

初始化的时候 kubeadm 会做一系列的校验,以检测你的服务器是否符合 kubernetes 的安装条件,检测结果分为 [WARNING] 和 [ERROR] 两种。其中 [ERROR] 部分要予以解决。

kubernetes搭建HDFS kubernetes 部署_初始化_16

错误
[ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.3-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
等等

我们可以通过国内厂商提供的 kubernetes 的镜像服务来下载,比如第一个 k8s.gcr.io/kube-apiserver:v1.14.1 镜像,可以执行如下命令从阿里云下载:

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.1

kubernetes搭建HDFS kubernetes 部署_docker_17


镜像下载下来以后再通过 docker tag 命令将其改成kudeadm安装时候需要的镜像名称。

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.1 k8s.gcr.io/kube-apiserver:v1.18.1

kubernetes搭建HDFS kubernetes 部署_docker_18


其它缺失的镜像也依照上面步骤进行操作

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.1 k8s.gcr.io/kube-controller-manager:v1.18.1

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.1 k8s.gcr.io/kube-scheduler:v1.18.1

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

kubernetes搭建HDFS kubernetes 部署_初始化_19


kubernetes搭建HDFS kubernetes 部署_docker_20


2、镜像全部下载完毕后,再执行最开始的 init 命令后 kubeadm 就能成功安装了。最后一行,kubeadm 会提示我们,其他节点需要加入集群的话,只需要执行这条命令就行了,同时里面包含了加入集群所需要的 token(这个要记下来)。

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.25.1.1:6443 --token 0pojwp.9qc7ohcng7h6c13y \
    --discovery-token-ca-cert-hash sha256:5fa833ee8861cc3ddd7d6d960287a1fa313be78b0a1c4fd71d3e4000bc4504bf

kubernetes搭建HDFS kubernetes 部署_初始化_21


kubernetes搭建HDFS kubernetes 部署_docker_22

四、配置 kubectl
kubectl 是管理 Kubernetes 集群的命令行工具,前面我们已经在所有的节点安装了 kubectl。Master 初始化安装完后需要做一些配置工作,然后 kubectl 就能使用了

1、具体操作就依照前面 kubeadm init 输出的第一个红框内容。这里推荐使用使用普通用户执行 kubectl(root 会有一些问题),首先我们新建个普通用户wjjk8s.

[root@server1 ~]# useradd wjjk8s
[root@server1 ~]# vim /etc/sudoers
[root@server1 ~]# su - wjjk8s 
[wjjk8s@server1 ~]$ mkdir -p $HOME/.kube
[wjjk8s@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[wjjk8s@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubernetes搭建HDFS kubernetes 部署_运维_23


kubernetes搭建HDFS kubernetes 部署_docker_24

2、为了使用更加便捷,启用 kubectl 命令的自动补全功能。

echo "source <(kubectl completion bash)" >> ~/.bashrc

3、安装 Pod 网络
要让 Kubernetes 集群能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。(即前面 kubeadm init 输出的第二个红框内容)

[wjjk8s@server1 ~]$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

4、开放端口(已关闭防火墙)

五、Node 节点的安装配置-将server2加入k8s集群

1,添加节点
(1)在两个 node 节点上分别执行如下命令(即前面 kubeadm init 输出的最后一个红框内容),将其注册到 Cluster 中:

server2:
kubeadm join --token 0pojwp.9qc7ohcng7h6c13y 172.25.1.1:6443 --discovery-token-ca-cert-hash sha256:5fa833ee8861cc3ddd7d6d960287a1fa313be78b0a1c4fd71d3e4000bc4504bf

kubernetes搭建HDFS kubernetes 部署_运维_25

kubectl get cs

kubernetes搭建HDFS kubernetes 部署_docker_26


2、安装镜像

在每一个 node 节点上我们还需要下载 quay.io/coreos/flannel:v0.11.0-amd64、k8s.gcr.io/pause 和 k8s.gcr.io/kube-proxy 这三个镜像,其中后面两个镜像具体版本可以执行kubeadm config images list 查看一下:

server24:

[root@server2 ~]# docker pull quay.io/coreos/flannel:v0.11.0-amd64

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2

kubernetes搭建HDFS kubernetes 部署_运维_27


kubernetes搭建HDFS kubernetes 部署_初始化_28


六、查看节点状态

(1)在 master 节点上执行 kubectl get nodes 查看节点状态:

[wjjk8s@server1 ~]$ kubectl get nodes
NAME      STATUS   ROLES    AGE    VERSION
server1   Ready    master   26m    v1.18.1
server2   Ready    <none>   11m    v1.18.1
server4   Ready    <none>   7m4s   v1.18.1

kubernetes搭建HDFS kubernetes 部署_vim_29


至此 Kubernetes集群创建成功。