CentOS 7.9基于kubeadm部署kubernetes v1.14.2

小柒博客 Kubernetes5125.3K10字数 10812阅读36分2秒阅读模式

一、Kubernetes简介

Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性。

K8S集群中有管理节点与工作节点两种类型。管理节点主要负责K8S集群管理,集群中各节点间的信息交互、任务调度,还负责容器、Pod、NameSpaces、PV等生命周期的管理。工作节点主要为容器和Pod提供计算资源,Pod及容器全部运行在工作节点上,工作节点通过kubelet服务与管理节点通信以管理容器的生命周期,并与集群其他节点进行通信。

二、Kubernetes环境准备

Kubernetes支持在物理服务器或虚拟机中运行,本次使用虚拟机准备测试环境,硬件配置信息如表所示:

IP地址

节点角色

CPU

内存

主机名

磁盘

192.168.0.96

master

>=2c

>=2G

master

sda

192.168.0.97

worker

>=2c

>=2G

node1

sda

192.168.0.99

worker

>=2c

>=2G

node2

sda

注:在master节点上进行如下操作

1、设置主机名hostname,管理节点设置主机名为master

[root@master ~]# hostnamectl set-hostname master && su -

2、设置Host解析,编辑/etc/hosts文件,添加域名解析。

[root@master ~]# cat >>/etc/hosts <<EOF

192.168.0.96 master

192.168.0.97 node1

192.168.0.99 node2

EOF

3、关闭防火墙(部署完成再开防火墙)、selinux和swap。

[root@master ~]# systemctl stop firewalld

[root@master ~]# systemctl disable firewalld

[root@master ~]# setenforce 0

[root@master ~]# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

[root@master ~]# swapoff -a

[root@master ~]# sed -i 's/.*swap.*/#&/' /etc/fstab

4、配置内核参数,将桥接的IPv4流量传递到iptables的链

[root@master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF

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

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

EOF

[root@master ~]# sysctl --system

5、配置腾讯yum源

[root@master ~]# yum -y install wget

[root@master ~]# mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

[root@master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

[root@master ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo

[root@master ~]# yum clean all && yum makecache

6、配置阿里云Kubernetes源

[root@master ~]# cat >/etc/yum.repos.d/kubernetes.repo <<EOF

[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

EOF

7、配置阿里云docker源

[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

注:在node1节点上进行如下操作

1、设置主机名hostname,管理节点设置主机名为node1

[root@node1 ~]# hostnamectl set-hostname node1 && su -

2、设置Host解析,编辑/etc/hosts文件,添加域名解析。

[root@node1 ~]# cat >>/etc/hosts <<EOF

192.168.0.96 master

192.168.0.97 node1

192.168.0.99 node2

EOF

3、关闭防火墙(部署完成再开防火墙)、selinux和swap。

[root@node1 ~]# systemctl stop firewalld

[root@node1 ~]# systemctl disable firewalld

[root@node1 ~]# setenforce 0

[root@node1 ~]# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

[root@node1 ~]# swapoff -a

[root@node1 ~]# sed -i 's/.*swap.*/#&/' /etc/fstab

4、配置内核参数,将桥接的IPv4流量传递到iptables的链

[root@node1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF

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

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

EOF

[root@node1 ~]# sysctl --system

5、配置腾讯yum源

[root@node1 ~]# yum -y install wget

[root@node1 ~]# mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

[root@node1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

[root@node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo

[root@node1 ~]# yum clean all && yum makecache

6、配置阿里云Kubernetes源

[root@node1 ~]# cat >/etc/yum.repos.d/kubernetes.repo <<EOF

[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

EOF

7、配置阿里云docker源

[root@node1 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

注:在node2节点上进行如下操作

1、设置主机名hostname,管理节点设置主机名为node2

[root@node2 ~]# hostnamectl set-hostname node2 && su -

2、设置Host解析,编辑/etc/hosts文件,添加域名解析。

[root@node2 ~]# cat >>/etc/hosts <<EOF

192.168.0.96 master

192.168.0.97 node1

192.168.0.99 node2

EOF

3、关闭防火墙(部署完成再开防火墙)、selinux和swap。

[root@node2 ~]# systemctl stop firewalld

[root@node2 ~]# systemctl disable firewalld

[root@node2 ~]# setenforce 0

[root@node2 ~]# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

[root@node2 ~]# swapoff -a

[root@node2 ~]# sed -i 's/.*swap.*/#&/' /etc/fstab

4、配置内核参数,将桥接的IPv4流量传递到iptables的链

[root@node2 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF

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

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

EOF

[root@node2 ~]# sysctl --system

5、配置腾讯yum源

[root@node2 ~]# yum -y install wget

[root@node2 ~]# mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

[root@node2 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

[root@node2 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo

[root@node2 ~]# yum clean all && yum makecache

6、配置阿里云Kubernetes源

[root@node2 ~]# cat >/etc/yum.repos.d/kubernetes.repo <<EOF

[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

EOF

7、配置阿里云docker源

[root@node2 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

三、Kubernetes软件安装

注:在master节点上进行如下操作

1、安装Docker

#可以查看所有仓库中所有docker版本,并选择特定版本安装(如果有安装过先卸载旧版本: yum -y remove docker docker-common docker-selinux docker-engine)

[root@master ~]# yum list docker-ce --showduplicates | sort -r

#安装Docker,命令:yum -y install docker-ce-版本号,我选的是18.09.7-3.el7,如下

[root@master ~]# yum install -y docker-ce-18.09.7-3.el7

[root@master ~]# systemctl enable docker && systemctl start docker

[root@master ~]# docker --version

Docker version 18.09.7, build 2d0083d

docker服务为容器运行提供计算资源,是所有容器运行的基本平台。

2、安装kubeadm、kubelet、kubectl,这里采用版本是1.14.2。

[root@master ~]# yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2

[root@master ~]# systemctl enable kubelet

Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。

注:在node1节点上进行如下操作

1、安装Docker

#可以查看所有仓库中所有docker版本,并选择特定版本安装(如果有安装过先卸载旧版本: yum -y remove docker docker-common docker-selinux docker-engine)

[root@node1 ~]# yum list docker-ce --showduplicates | sort -r

#安装Docker,命令:yum -y install docker-ce-版本号,我选的是18.09.7-3.el7,如下

[root@node1 ~]# yum install -y docker-ce-18.09.7-3.el7

[root@node1 ~]# systemctl enable docker && systemctl start docker

[root@node1 ~]# docker --version

Docker version 18.09.7, build 2d0083d

docker服务为容器运行提供计算资源,是所有容器运行的基本平台。

2、安装kubeadm、kubelet、kubectl,这里采用版本是1.14.2。

[root@node1 ~]# yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2

[root@node1 ~]# systemctl enable kubelet

Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。

注:在node2节点上进行如下操作

1、安装Docker

#可以查看所有仓库中所有docker版本,并选择特定版本安装(如果有安装过先卸载旧版本: yum -y remove docker docker-common docker-selinux docker-engine)

[root@node2 ~]# yum list docker-ce --showduplicates | sort -r

#安装Docker,命令:yum -y install docker-ce-版本号,我选的是18.09.7-3.el7,如下

[root@node2 ~]# yum install -y docker-ce-18.09.7-3.el7

[root@node2 ~]# systemctl enable docker && systemctl start docker

[root@node2 ~]# docker --version

Docker version 18.09.7, build 2d0083d

docker服务为容器运行提供计算资源,是所有容器运行的基本平台。

2、安装kubeadm、kubelet、kubectl,这里采用版本是1.14.2。

[root@node2 ~]# yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2

[root@node2 ~]# systemctl enable kubelet

Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。

四、部署Master节点

注:在master节点上进行如下操作

1、在master进行Kubernetes集群初始化。

[root@master ~]# kubeadm init --kubernetes-version=1.14.2 \

--apiserver-advertise-address=192.168.0.96 \

--image-repository registry.aliyuncs.com/google_containers \

--service-cidr=10.1.0.0/16 \

--pod-network-cidr=10.244.0.0/16

定义POD的网段为: 10.244.0.0/16,apiserver地址就是master本机IP地址。

这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过--image-repository指定阿里云镜像仓库地址,很多新手初次部署都卡在此环节无法进行后续配置。

集群初始化成功后返回如下信息:

记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。

2、配置kubectl工具

[root@master ~]# mkdir -p /root/.kube

[root@master ~]# cp /etc/kubernetes/admin.conf /root/.kube/config

[root@master ~]# kubectl get nodes

[root@master ~]# kubectl get cs

3、部署flannel网络

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

五、部署Node节点

注:在node1节点上进行如下操作

#文件驱动默认由systemd改成cgroupfs,#而我们安装的docker使用的文件驱动是systemd,造成不一致,导致镜像无法启动。

#docker info查看

#Cgroup Driver: systemd

#现在有两种方式, 一种是修改docker, 另一种是修改kubelet。

#修改docker

#创建/etc/docker/daemon.json,加入下面的内容:

[root@node1 ~]# cat >/etc/docker/daemon.json <<EOF

{

"exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

[root@node1 ~]# systemctl daemon-reload

[root@node1 ~]# systemctl restart docker

执行如下命令,使node1节点加入Kubernetes集群

[root@node1 ~]# kubeadm join 192.168.0.96:6443 --token 33rqd5.jyxie7v2mo2iq1ha --discovery-token-ca-cert-hash sha256:406c21855070f72f866b724a7767a39e1bdd2633ca01ad1d9aa83d1b93a758a8

此命令为集群初始化时(kubeadm init)返回结果中的内容。

大约需要1分多钟,请耐心等候,超时为5分钟。

注:在node2节点上进行如下操作

#文件驱动默认由systemd改成cgroupfs,#而我们安装的docker使用的文件驱动是systemd,造成不一致,导致镜像无法启动。

#docker info查看

#Cgroup Driver: systemd

#现在有两种方式, 一种是修改docker, 另一种是修改kubelet。

#修改docker

#创建/etc/docker/daemon.json,加入下面的内容:

[root@node2 ~]# cat >/etc/docker/daemon.json <<EOF

{

"exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

[root@node2 ~]# systemctl daemon-reload

[root@node2 ~]# systemctl restart docker

执行如下命令,使node2节点加入Kubernetes集群

[root@node2 ~]# kubeadm join 192.168.0.96:6443 --token 33rqd5.jyxie7v2mo2iq1ha --discovery-token-ca-cert-hash sha256:406c21855070f72f866b724a7767a39e1bdd2633ca01ad1d9aa83d1b93a758a8

此命令为集群初始化时(kubeadm init)返回结果中的内容。

大约需要1分多钟,请耐心等候,超时为5分钟。

#默认token的有效期为24小时,当过期之后,该token就不可用了。解决方法如下:

#重新生成新的token,在master端执行kubeadm token create --print-join-command

六、集群状态检测

注:在master节点上进行如下操作

1、在master节点输入命令检查集群状态,返回如下结果则集群状态正常。

[root@master ~]# kubectl get nodes

重点查看STATUS内容为Ready时,则说明集群状态正常。

2、创建Pod以验证集群是否正常。

[root@master ~]# kubectl create deployment nginx --image=nginx

[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort

[root@master ~]# kubectl get pod,svc

七、部署Dashboard

注:在master节点上进行如下操作

1、创建Dashboard的yaml文件

[root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

[root@master ~]# sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml

[root@master ~]# sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml

2、部署Dashboard

[root@master ~]# kubectl create -f kubernetes-dashboard.yaml

3、创建完成后,检查相关服务运行状态

[root@master ~]# kubectl get deployment kubernetes-dashboard -n kube-system

[root@master ~]# kubectl get pods -n kube-system -o wide

[root@master ~]# kubectl get services -n kube-system

[root@master ~]# netstat -lntup|grep 3000

4、在Firefox浏览器输入Dashboard访问地址:https://192.168.0.96:30001

5、查看访问Dashboard的认证令牌

[root@master ~]# kubectl create serviceaccount dashboard-admin -n kube-system

[root@master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

[root@master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

6、复制输出的token登录Dashboard

#用火狐浏览器访问https://192.168.0.96:30001(证书问题,只能通过火狐浏览器访问)

认证通过后,登录Dashboard首页如图

至此,Kubernetes-1.14.2安装完毕。

若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!

继续阅读
Wechat
微信扫一扫,加我!
weinxin
微信公众号
微信扫一扫,关注我!
weinxin
小柒博客
  • 本文由 小柒博客 发表于 2019年7月5日11:46:06
  • 声明:本站所有文章,如无特殊说明或标注,本站文章均为原创。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。转载请务必保留本文链接:https://www.yangxingzhen.com/5148.html
评论  5  访客  3  作者  2
    • 膜拜大佬
      膜拜大佬 1

      写的不错哦

      • Mr丶点心
        Mr丶点心 0

        写的很不错哦

        • 运维老司机
          运维老司机 6

          写的不错 :razz:

          • 小柒博客
            小柒博客

            :grin: :grin:

          匿名

          发表评论

          匿名网友
          :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

          拖动滑块以完成验证