youki2008
作者youki2008·2020-06-29 14:46
系统架构师·DDT

kubernetes系列03—kubeadm安装部署K8S集群

字数 9305阅读 3090评论 0赞 4

kubernetes系列03—kubeadm安装部署K8S集群

1、kubernetes安装介绍

1.1 K8S 架构图

1.2 K8S 搭建安装示意图

1.3 安装 kubernetes 方法

1.3.1 方法 1 :使用 kubeadm 安装 kubernetes (本文演示的就是此方法)
  • 优点:你只要安装 kubeadm 即可; kubeadm 会帮你自动部署安装 K8S 集群 ;如:初始化 K8S 集群、配置各个插件的证书认证、部署集群网络等。安装简易。
  • 缺点:不是自己一步一步安装,可能对 K8S 的理解不会那么深;并且有那一部分有问题,自己不好修正。
1.3.2 方法 2 :二进制安装部署 kubernetes (详见下篇kubernetes系列04—二进制安装部署kubernetes集群
  • 优点: K8S 集群所有东西,都由自己一手安装搭建 ;清晰明了,更加深刻细节的掌握 K8S ;哪里出错便于快速查找验证。
  • 缺点:安装较为繁琐麻烦,且易于出错。

2 、安装 kubernetes 先决条件

2.1 组件版本

  • docker 17.03.2
  • kubeadm 1.11.1
  • kubelet 1.11.1
  • kubectl 1.11.1

2.2 集群机器

  • kube-master : 192.168.10.103
  • kube-node1 : 192.168.10.104
  • kube-node2 : 192.168.10.105

2.3 主机名

1 、设置永久主机名称,然后重新登录

123$ sudo hostnamectl set-hostname master$ sudo hostnamectl set-hostname node1$ sudo hostnamectl set-hostname node2

2 、修改 /etc/hostname 文件,添加主机名和 IP 的对应关系:

1234$ vim /etc/hosts192.168.10.103 master192.168.10.104 node1192.168.10.105 node2

2.4 同步系统时间

12$ yum -y install ntpdate$ sudo ntpdate cn.pool.ntp.org

2.5 关闭防火墙

在每台机器上关闭防火墙:

① 关闭服务,并设为开机不自启

12$ sudo systemctl stop firewalld$ sudo systemctl disable firewalld

② 清空防火墙规则

12$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat$ sudo iptables -P FORWARD ACCEPT

2.6 关闭 swap 分区

1 、如果开启了 swap 分区, kubelet 会启动失败 ( 可以通过将参数 --fail-swap-on 设置为 false 来忽略 swap on) ,故需要在每台机器上关闭 swap 分区:

1$ sudo swapoff -a

2 、为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目:

1$ sudo sed -i '/ swap / s/^\\(.*\\)$/#\1/g' /etc/fstab

2.7 关闭 SELinux

1 、关闭 SELinux ,否则后续 K8S 挂载目录时可能报错 Permission denied :

1$ sudo setenforce 0

2 、修改配置文件,永久生效;

12$ vim /etc/selinux/configSELINUX=disabled

3 、使用 kubeadm 安装 K8S 集群

3.1 认识 kubeadm

3.2 配置安装源

3.2.1 配置 docker-ce 源信息

( 1 )添加 docker-ce 源信息

1[root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

( 2 )修改 docker-ce 源

1[root@master ~]# sed -i 's@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo

3.2.2 配置 kubernetes 仓库

1234567[root@node2 ~]# cd /etc/yum.repos.d/[root@master yum.repos.d]# vim kubernetes.repo[kubernetes]name=Kubernetes Repobaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/gpgcheck=0enable=1

3.2.3 更新 yum 仓库

12345678[root@master yum.repos.d]# yum clean all[root@master yum.repos.d]# yum repolistrepo id repo name statusbase base 9,363docker-ce-stable/x86_64 Docker CE Stable - x86_64 20epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,663kubernetes Kubernetes Repo 246repolist: 22,292

3.3 安装 docker 、 kubelet 、 kubeadm 、 kubectl

  • kubelet : 负责管理 pods 和它们上面的容器, 维护容器的生命周期
  • kubeadm :安装 K8S 工具
  • kubectl : K8S 命令行工具

    ( 1 )安装

12[root@master ~]# yum -y install docker-ce-17.03.2.ce 下载稳定版本17.03.2[root@master ~]# yum -y install kubeadm-1.11.1 kubelet-1.11.1 kubectl-1.11.1

( 2 )安装 docker 报错(虚拟机中可能会遇到,如果没有报错请忽略)

Error: Package: docker-ce-18.03.1.ce-1.el7.centos.x86_64 (docker-ce-stable)

Requires: container-selinux >= 2.9

报错原因: docker-ce-selinux 版本过低

解决办法:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/ 网站下载对应版本的 docker-ce-selinux ,安装即可

1[root@master ~]# yum -y install https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm

再次安装 docker 成功:

1[root@master ~]# yum -y install docker-ce-17.03.2.ce

3.4 启动服务

3.4.1 配置启动 docker 服务

( 1 )添加加速器到配置文件

123456[root@master ~]# mkdir -p /etc/docker[root@master ~]# tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://registry.docker-cn.com"]}EOF

( 2 )启动服务

123[root@master ~]# systemctl daemon-reload[root@master ~]# systemctl start docker[root@master ~]# systemctl enable docker.service

( 3 )打开 iptables 内生的桥接相关功能,已经默认开启了,没开启的自行开启

1234[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables1[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables1

3.4.2 配置启动 kubelet 服务

( 1 )修改配置文件

123[root@master ~]# vim /etc/sysconfig/kubeletKUBELET_EXTRA_ARGS="--fail-swap-on=false"KUBE_PROXY=MODE=ipvs

( 2 )先设为开机自启

1[root@master ~]# systemctl enable kubelet.service

因为 K8S 集群还未初始化,所以 kubelet 服务启动不成功,下面初始化完成,再启动即可。

4 、初始化 kubernetes master 节点

在 master 服务器上执行,完成以下所有操作

4.1 使用 kubeadm init 初始化

( 1 )使用 kubeadm init 进行初始化(需要进行很多操作,所以要等待一段时间)

1[root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

释:

  • --kubernetes-version : 指定 kubeadm 版本;我这里下载的时候 kubeadm 最高时 1.11.1 版本
  • --pod-network-cidr : 指定 pod 所属网络
  • --service-cidr : 指定 service 网段
  • --ignore-preflight-errors=Swap/all : 忽略 swap/ 所有 报错

    注:

    因为 kubeadm 需要拉取必要的镜像,这些镜像需要 “ 科学上网 ” ;所以可以先在 docker hub 或其他镜像仓库拉取 kube-proxy 、 kube-scheduler 、 kube-apiserver 、 kube-controller-manager 、 etcd 、 pause 镜像;并加上 --ignore-preflight-errors=all 忽略所有报错即可

    ( 2 )下载镜像

    我已经将我下载的镜像导出,放入我的网盘,有需要的打赏一杯咖啡钱,私聊博主;博主会很快恢复的;

123456[root@master ~]# docker image load -i kube-apiserver-amd64.tar.gz[root@master ~]# docker image load -i kube-proxy-amd64.tar.gz[root@master ~]# docker image load -i kube-controller-manager-amd64.tar.gz[root@master ~]# docker image load -i kube-scheduler-amd64.tar.gz[root@master ~]# docker image load -i etcd-amd64.tar.gz[root@master ~]# docker image load -i pause.tar.gz

( 3 )初始化命令成功后,创建 .kube 目录

12[root@master ~]# mkdir -p $HOME/.kube[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

4.2 验证

( 1 )拉取了必须的镜像

12345678[root@master ~]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEk8s.gcr.io/kube-proxy-amd64 v1.11.1 d5c25579d0ff 6 months ago 97.8 MBk8s.gcr.io/kube-scheduler-amd64 v1.11.1 272b3a60cd68 6 months ago 56.8 MBk8s.gcr.io/kube-apiserver-amd64 v1.11.1 816332bd9d11 6 months ago 187 MBk8s.gcr.io/kube-controller-manager-amd64 v1.11.1 52096ee87d0e 6 months ago 155 MBk8s.gcr.io/etcd-amd64 3.2.18 b8df3b177be2 9 months ago 219 MBk8s.gcr.io/pause 3.1 da86e6ba6ca1 13 months ago 742 kB

( 2 )开启了 kube-apiserver 的 6443 端口

12[root@master ~]# ss -nutlptcp LISTEN 0 128 :::6443 :::* users:(("kube-apiserver",pid=1609,fd=3))

( 3 )使用 kubectl 命令查询集群信息

查询组件状态信息

12345[root@master ~]# kubectl get csNAME STATUS MESSAGE ERRORcontroller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health": "true"}

查询集群节点信息(因为还没有部署好 flannel ,所以节点显示为 NotReady )

123[root@master ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster NotReady master 13m v1.11.1

查询名称空间,默认

12345[root@master ~]# kubectl get nsNAME STATUS AGEdefault Active 13mkube-public Active 13mkube-system Active 13m

4.3 部署网络插件 flannel

( 1 )直接使用 kubectl 执行 gitlab 上的 flannel 部署文件

12345678910[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlclusterrole.rbac.authorization.k8s.io/flannel createdclusterrolebinding.rbac.authorization.k8s.io/flannel createdserviceaccount/flannel createdconfigmap/kube-flannel-cfg createddaemonset.extensions/kube-flannel-ds-amd64 createddaemonset.extensions/kube-flannel-ds-arm64 createddaemonset.extensions/kube-flannel-ds-arm createddaemonset.extensions/kube-flannel-ds-ppc64le createddaemonset.extensions/kube-flannel-ds-s390x created

( 2 )会看到下载好的 flannel 的镜像

123[root@master ~]# docker image lsgrep flannelquay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 12 months ago 44.6 MBquay.io/coreos/flannel v0.9.1 2b736d06ca4c 14 months ago 51.3 MB

( 3 )验证

① master 节点已经 Ready

123[root@master ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster Ready master 14m v1.11.1

② 查询 kube-system 名称空间下

123[root@master ~]# kubectl get pods -n kube-system(指定名称空间)grep flannelNAME READY STATUS RESTARTS AGEkube-flannel-ds-amd64-4wck2 1/1 Running 0 1m

5 、初始化 kubernetes node 节点

在 2 个 node 服务器上执行,完成以下所有操作

5.1 使用 kubeadm join 初始化

( 1 )初始化 node 节点;下边的命令是 master 初始化完成后,下边有提示的操作命令

1[root@node1 ~]# kubeadm join 192.168.10.103:6443 --token t56pjr.cm898tj09xm9pkqz --discovery-token-ca-cert-hash sha256:3ffe1c840e8a4b334fc2cc3d976b0e3635410e52e3653bb39585b8b557f81bc4 --ignore-preflight-errors=Swap

( 2 )从节点如果不能 “ 科学上网 ” ,只需从本地上传 2 个镜像即可;还是我网盘中的镜像

12[root@node1 ~]# docker image load -i kube-proxy-amd64.tar.gz[root@node1 ~]# docker image load -i pause.tar.gz

5.2 验证集群是否初始化成功

( 1 )查询 2 个节点的镜像

12345[root@node1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZEk8s.gcr.io/kube-proxy-amd64 v1.11.1 d5c25579d0ff 6 weeks ago 97.8 MBquay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 7 months ago 44.6 MBk8s.gcr.io/pause 3.1 da86e6ba6ca1 8 months ago 742 kB

( 2 )等 2 个从节点上下载好镜像,初始化完成,再在主上查询验证

12345[root@master ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster Ready master 28m v1.11.1node1 Ready 7m v1.11.1node2 Ready 2m v1.11.1

( 3 )在主节点查询 kube-system 名称空间下关于 node 节点 pod 的信息

12345[root@master ~]# kubectl get pods -n kube-system -o widegrep nodekube-flannel-ds-amd64-fcm9x 1/1 Running 15 91d 192.168.130.105 node2kube-flannel-ds-amd64-hzkp7 1/1 Running 17 91d 192.168.130.104 node1kube-proxy-f2kkn 1/1 Running 34 139d 192.168.130.104 node1kube-proxy-kkqln 1/1 Running 35 139d 192.168.130.105 node2

至此, kubernetes 集群已经搭建安装完成; kubeadm 帮助我们在后台完成了所有操作;想要自己全部手动搭建 kubernetes 集群;

**作者:along阿龙
出处:http://www.cnblogs.com/along21/
简介:每天都在进步,每周都在总结,你的一个点赞,一句留言,就可以让博主开心一笑,充满动力!
版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。**

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广