本文收录在容器技术学习系列文章总目录

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

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

  

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

$ vim /etc/hosts
192.168.10.103 master
192.168.10.104 node1
192.168.10.105 node2

  

2.4 同步系统时间

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

  

2.5 关闭防火墙

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

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

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

② 清空防火墙规则

$ 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 分区:

$ sudo swapoff -a

  

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

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

  

2.7 关闭 SELinux

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

$ sudo setenforce 0

  

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

$ vim /etc/selinux/config
SELINUX=disabled

  

3、使用kubeadm安装K8S集群

3.1 认识kubeadm

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

3.2 配置安装源

3.2.1 配置docker-ce 源信息

(1)添加docker-ce 源信息

[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 源

[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仓库

[root@node2 ~]# cd /etc/yum.repos.d/
[root@master 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仓库

[root@master yum.repos.d]# yum clean all
[root@master 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)安装

[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,安装即可

[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 成功:

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

  

3.4 启动服务

3.4.1 配置启动docker服务

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

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

  

(2)启动服务

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

  

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

[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1

  

3.4.2 配置启动kubelet服务

(1)修改配置文件

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

  

(2)先设为开机自启

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

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

4、初始化kubernetes master节点

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

4.1 使用kubeadm init初始化

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

[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)下载镜像

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

[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目录

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

  

4.2 验证

(1)拉取了必须的镜像

[root@master ~]# 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端口

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

  

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

查询组件状态信息

[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}

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

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 13m v1.11.1

查询名称空间,默认

[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 13m
kube-public Active 13m
kube-system Active 13m

  

4.3 部署网络插件flannel

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

[root@master ~]# 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 的镜像

[root@master ~]# 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

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 14m v1.11.1

② 查询kube-system名称空间下

[root@master ~]# 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初始化完成后,下边有提示的操作命令

[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个镜像即可;还是我网盘中的镜像

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

  

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

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

[root@node1 ~]# 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个从节点上下载好镜像,初始化完成,再在主上查询验证

[root@master ~]# 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的信息

[root@master ~]# 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集群;详解下篇二进制安装部署kubernetes集群---超详细教程

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

  1. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  2. 通过kubeadm工具部署k8s集群

    1.概述 kubeadm是一工具箱,通过kubeadm工具,可以快速的创建一个最小的.可用的,并且符合最佳实践的k8s集群. 本文档介绍如何通过kubeadm工具快速部署一个k8s集群. 2.主机规划 ...

  3. Kubeadm安装的K8S集群1年证书过期问题的解决思路

    这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...

  4. 通过kubeadm快速部署K8S集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm i ...

  5. 【02】Kubernets:使用 kubeadm 部署 K8S 集群

    写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...

  6. 使用kubeadm部署k8s集群[v1.18.0]

    使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...

  7. Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复

    目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...

  8. 菜鸟系列k8s——快速部署k8s集群

    快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...

  9. 部署K8S集群

    1.Kubernetes 1.1.概念 kubernetes(通常称为k8s)用于自动部署.扩展和管理容器化应用程序的开源系统.它旨在提供“跨主机集群的自动部署.扩展以及运行应用程序容器的平台”.支持 ...

随机推荐

  1. 「雅礼集训 2017 Day5」矩阵

    填坑填坑.. 感谢wwt耐心讲解啊.. 如果要看这篇题解建议从上往下读不要跳哦.. 30pts 把$A$和$C$看成$n$个$n$维向量,那$A_i$是否加入到$C_j$中就可以用$B_{i,j}$表 ...

  2. python爬取房天下数据Demo

    import requests from bs4 import BeautifulSoup res = requests.get('http://sh.esf.fang.com/chushou/3_3 ...

  3. Linux进阶命令用法

    1.tr命令 可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符 选项 -c或——complerment:取代所有不属于第一字符集的字符: -d或——delete:删除所有属 ...

  4. HTML入门12

    开始了解响应式图片 响应式,根据屏幕尺寸和分辨率的设备上都能良好工作以及其他特性的图片,接下来考虑怎样创建自适应得图片,专注于img元素,完成自适应. 分辨率切换,不同的尺寸 <img srcs ...

  5. [LeetCode] Hand of Straights 一手顺子牌

    Alice has a hand of cards, given as an array of integers. Now she wants to rearrange the cards into ...

  6. linux 使用sh@d0ws0cks server

    [root@linux-node1 ~]# cat /etc/shadowsocks.json { "server":"x.x.x.x", , "lo ...

  7. 深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存

    摘要: 主要针对Dao层的一些数据库查询的操作,数据实时性不强,直接加入缓存.当缓存中有的时候,就使用缓存中的数据.这样的方法,最终仅仅使用一个注解实现.对于之前的hibernate二级缓存使用,比较 ...

  8. [Swift]LeetCode279. 完全平方数 | Perfect Squares

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  9. [Swift]LeetCode308. 二维区域和检索 - 可变 $ Range Sum Query 2D - Mutable

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  10. [Swift]LeetCode457. 环形数组循环 | Circular Array Loop

    You are given an array of positive and negative integers. If a number n at an index is positive, the ...