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、设置永久主机名称,然后重新登录


1

2

3

sudo hostnamectl set-hostname master

sudo hostnamectl set-hostname node1

sudo hostnamectl set-hostname node2

  

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


1

2

3

4

$ vim /etc/hosts

192.168.10.103 master

192.168.10.104 node1

192.168.10.105 node2

  

2.4 同步系统时间


1

2

$ yum -y install ntpdate

sudo ntpdate cn.pool.ntp.org

  

2.5 关闭防火墙

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

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


1

2

sudo systemctl stop firewalld

sudo systemctl disable firewalld

② 清空防火墙规则


1

2

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、修改配置文件,永久生效;


1

2

$ vim /etc/selinux/config

SELINUX=disabled

  

3、使用kubeadm安装K8S集群

3.1 认识kubeadm

以下操作在3个服务器上,都要执行!

3.2 配置安装源

3.2.1 配置docker-ce 源信息

(1)添加docker-ce 源信息


1

[[email protected] ~]# 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

[[email protected] ~]# sed -i ‘[email protected]@mirrors.tuna.tsinghua.edu.cn/[email protected]‘ /etc/yum.repos.d/docker-ce.repo

  

3.2.2 配置kubernetes仓库


1

2

3

4

5

6

7

[[email protected] ~]# cd /etc/yum.repos.d/

[[email protected] yum.repos.d]# vim kubernetes.repo

[kubernetes]

name=Kubernetes Repo

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

gpgcheck=0

enable=1

  

3.2.3 更新yum仓库


1

2

3

4

5

6

7

8

[[email protected] yum.repos.d]# yum clean all

[[email protected] yum.repos.d]# yum repolist

repo id                                 repo name                                                       status

base                                    base                                                                9,363

docker-ce-stable/x86_64         Docker CE Stable - x86_64                                     20

epel/x86_64                         Extra Packages for Enterprise Linux 7 - x86_64      12,663

kubernetes                          Kubernetes Repo                                                 246

repolist: 22,292

  

3.3 安装docker、kubelet、kubeadm、kubectl

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

(1)安装


1

2

[[email protected] ~]# yum -y install docker-ce-17.03.2.ce   下载稳定版本17.03.2

[[email protected] ~]# 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

[[email protected] ~]# 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

[[email protected] ~]# yum -y install docker-ce-17.03.2.ce

  

3.4 启动服务

3.4.1 配置启动docker服务

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


1

2

3

4

5

6

[[email protected] ~]# mkdir -p /etc/docker

[[email protected] ~]# tee /etc/docker/daemon.json <<-‘EOF‘

{

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

EOF

  

(2)启动服务


1

2

3

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# systemctl start docker

[[email protected] ~]# systemctl enable docker.service

  

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


1

2

3

4

[[email protected] ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables

1

[[email protected] ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables

1

  

3.4.2 配置启动kubelet服务

(1)修改配置文件


1

2

3

[[email protected] ~]# vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

KUBE_PROXY=MODE=ipvs

  

(2)先设为开机自启


1

[[email protected] ~]# systemctl enable kubelet.service

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

4、初始化kubernetes master节点

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

4.1 使用kubeadm init初始化

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


1

[[email protected] ~]# 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)下载镜像

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


1

2

3

4

5

6

[[email protected] ~]# docker image load -i kube-apiserver-amd64.tar.gz

[[email protected] ~]# docker image load -i kube-proxy-amd64.tar.gz

[[email protected] ~]# docker image load -i kube-controller-manager-amd64.tar.gz

[[email protected] ~]# docker image load -i kube-scheduler-amd64.tar.gz

[[email protected] ~]# docker image load -i etcd-amd64.tar.gz

[[email protected] ~]# docker image load -i pause.tar.gz

  

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


1

2

[[email protected] ~]# mkdir -p $HOME/.kube

[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  

4.2 验证

(1)拉取了必须的镜像


1

2

3

4

5

6

7

8

[[email protected] ~]# docker image ls

REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE

k8s.gcr.io/kube-proxy-amd64                         v1.11.1             d5c25579d0ff        6 months ago        97.8 MB

k8s.gcr.io/kube-scheduler-amd64                     v1.11.1             272b3a60cd68        6 months ago        56.8 MB

k8s.gcr.io/kube-apiserver-amd64                     v1.11.1             816332bd9d11        6 months ago        187 MB

k8s.gcr.io/kube-controller-manager-amd64            v1.11.1             52096ee87d0e        6 months ago        155 MB

k8s.gcr.io/etcd-amd64                               3.2.18              b8df3b177be2        9 months ago        219 MB

k8s.gcr.io/pause                                    3.1                 da86e6ba6ca1        13 months ago       742 kB

  

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


1

2

[[email protected] ~]# ss -nutlp

tcp   LISTEN     0      128                   :::6443                              :::*                   users:(("kube-apiserver",pid=1609,fd=3))

  

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

查询组件状态信息


1

2

3

4

5

[[email protected] ~]# kubectl get cs

NAME                 STATUS    MESSAGE              ERROR

controller-manager   Healthy   ok                  

scheduler            Healthy   ok                  

etcd-0               Healthy   {"health""true"}

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


1

2

3

[[email protected] ~]# kubectl get nodes

NAME      STATUS    ROLES     AGE       VERSION

master    NotReady  master    13m       v1.11.1

查询名称空间,默认


1

2

3

4

5

[[email protected] ~]# kubectl get ns

NAME            STATUS    AGE

default         Active    13m

kube-public     Active    13m

kube-system     Active    13m

  

4.3 部署网络插件flannel

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


1

2

3

4

5

6

7

8

9

10

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

clusterrole.rbac.authorization.k8s.io/flannel created

clusterrolebinding.rbac.authorization.k8s.io/flannel created

serviceaccount/flannel created

configmap/kube-flannel-cfg created

daemonset.extensions/kube-flannel-ds-amd64 created

daemonset.extensions/kube-flannel-ds-arm64 created

daemonset.extensions/kube-flannel-ds-arm created

daemonset.extensions/kube-flannel-ds-ppc64le created

daemonset.extensions/kube-flannel-ds-s390x created

  

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


1

2

3

[[email protected] ~]# docker image ls |grep flannel

quay.io/coreos/flannel                              v0.10.0-amd64       f0fad859c909        12 months ago       44.6 MB

quay.io/coreos/flannel                              v0.9.1              2b736d06ca4c        14 months ago       51.3 MB

  

(3)验证

① master 节点已经Ready


1

2

3

[[email protected] ~]# kubectl get nodes

NAME      STATUS    ROLES     AGE       VERSION

master    Ready     master    14m       v1.11.1

② 查询kube-system名称空间下


1

2

3

[[email protected] ~]# kubectl get pods -n kube-system(指定名称空间) |grep flannel

NAME                             READY     STATUS    RESTARTS   AGE

kube-flannel-ds-amd64-4wck2      1/1       Running   0          1m

  

5、初始化kubernetes node节点

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

5.1 使用kubeadm join 初始化

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


1

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

  

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


1

2

[[email protected] ~]# docker image load -i kube-proxy-amd64.tar.gz

[[email protected] ~]# docker image load -i pause.tar.gz

  

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

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


1

2

3

4

5

[[email protected] ~]# docker image ls  

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE

k8s.gcr.io/kube-proxy-amd64   v1.11.1             d5c25579d0ff        6 weeks ago         97.8 MB

quay.io/coreos/flannel        v0.10.0-amd64       f0fad859c909        7 months ago        44.6 MB

k8s.gcr.io/pause              3.1                 da86e6ba6ca1        8 months ago        742 kB

  

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


1

2

3

4

5

[[email protected] ~]# kubectl get nodes

NAME      STATUS    ROLES     AGE       VERSION

master    Ready     master    28m       v1.11.1

node1     Ready     <none>    7m        v1.11.1

node2     Ready     <none>    2m        v1.11.1

  

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


1

2

3

4

5

[[email protected] ~]# kubectl get pods -n kube-system -o wide |grep node

kube-flannel-ds-amd64-fcm9x             1/1       Running   15         91d       192.168.130.105   node2

kube-flannel-ds-amd64-hzkp7             1/1       Running   17         91d       192.168.130.104   node1

kube-proxy-f2kkn                        1/1       Running   34         139d      192.168.130.104   node1

kube-proxy-kkqln                        1/1       Running   35         139d      192.168.130.105   node2

  

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

原文地址:https://www.cnblogs.com/liwenzhang/p/10828089.html

时间: 2024-08-04 02:33:11

kubernetes系列03—kubeadm安装部署K8S集群的相关文章

Centos7.7使用kubeadm快速部署K8s集群(适合新手)

部署环境: 以下实验都是在VM虚拟机中进行部署的,仅供个人学习测试,不建议直接上生产环境. PS:其中,master的CPU核数至少需要2核,还没有测试过1G内存是否可以正常安装 节点 系统 CPU核数 内存 磁盘 IP k8s-master Centos7.7minimal 2核 2G 20G 192.168.2.130 k8s-node01 Centos7.7minimal 1核 1G 20G 192.168.2.134 k8s-node02 Centos7.7minimal 1核 1G 2

K8S简介+CentOS7 部署K8S集群

一.前言 Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案.在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性.[Kubernetes是容器集群管理工具] 二.Kubernetes的架构图 三.重要概念 3.1.cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运

Kubernetes学习之路(一)之Kubeadm部署K8S集群

一个星期会超过多少阅读量呢??发布一篇,看看是否重新在51上写学习博文,有老铁支持嘛?? 使用kubeadm部署集群 节点名称 ip地址 部署说明 Pod 网段 Service网段 系统说明 k8s-master 192.168.56.11 docker.kubeadm.kubectl.kubelet 10.244.0.0/16 10.96.0.0/12 Centos 7.4 k8s-node01 192.168.56.12 docker.kubeadm.kubelet 10.244.0.0/1

Kubernetes/3.使用Kubeadm部署k8s集群

使用Kubeadm部署k8s集群 kubeadm是一个提供了"kubeadm init"和"kubeadm join"最佳实践命令,且用于快速构建一个kubernetes集群的工具,你可以使用此工具快速构建一个kubernetes学习环境.通过本章节的学习,你将能够使用kubeadm工具,成功构建出一个基础的kubernetes集群环境. 环境准备 Hosts文件准备 Docker环境配置 其他准备工作 使用Kubeadm部署k8s集群 参考文档 备注 环境准备 i

使用kubeadm部署k8s集群01-初始化

使用kubeadm部署k8s集群01-初始化 2018/1/3 节点配置 master x3 OS version: centos7 swapoff ### 阿里云默认:off hosts ### 每个节点上配置: [[email protected] ~]# cat /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 Docker version: latest(17.0

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver 2018/1/4 配置 LB 指向 kube-apiserver 小目标:在 3 个 master 节点前,还需配置一个 LB 来作为 apiserver 的入口 LB -> master x3 直接使用阿里云内网 SLB L4 proxy 资源(本次实例是 4 层而不使用 7 层的原因是:跳过了处理证书的环节) 申请下来资源后,将得到一个 vip 指向上述 3 个 master 节点的 IP 作为后端真实服务器 注

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver 2018/1/4 配置 kubectl 访问 kube-apiserver 切换 master 节点连接到本节点的 apiserver 确认集群信息 切换 master 节点连接到本节点的 apiserver ### 为了在这 2 个新的节点执行 kubectl 需要配置 admin.yaml [[email protected] ~]# mkdir -p ~/k8s_install/master/admi

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点 2018/1/4 扩容 kube-scheduler 到 3 节点 连接到本节点的 apiserver [[email protected] kube-controller-manager]# cat /etc/kubernetes/manifests/kube-scheduler.yaml |grep '/etc/kubernetes' --kubeconfig=/etc/kubernetes/scheduler.

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点 2018/1/4 配置 worker 节点 初始化 加入集群 切换 worker 节点连接到 apiserver 的 LB 入口 调整集群中节点角色和调度策略 初始化 /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 k8s worker @envDev 10.10.9.74 tvm-0310.10.9.75 t