K8S最新版本集群部署超详细(k8s版本1.5.1)docker 版本19.03.1以及基本操作和服务介绍。

Posted 抛物线.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S最新版本集群部署超详细(k8s版本1.5.1)docker 版本19.03.1以及基本操作和服务介绍。相关的知识,希望对你有一定的参考价值。

更新:今天抽时间写了昨天部署的一键脚本: date:Aug 3,2019
《Kubernetes最新版本1.15.1,shell脚本一键部署,刚刚完成测试,实用。》

最近利用空闲时间,把之前部署和学习k8s时的整个过程和遇到的问题总结了一下,分享给有需要的小伙伴。对自己也是一种知识的加固
针对于K8S的安装有很多种方法,像二进制啊等,这里介绍的是kubeadm方法,在线拉取镜像,使用的是最新版的镜像。废话不多说。

组件版本清单:

镜像组件、应用软件版本
Virtual Box6.x
Secure CRTX
Docker version19.03.1
OScentos7.x
k8s.gcr.io/kube-schedulerv1.15.1
k8s.gcr.io/kube-proxyv1.15.1
k8s.gcr.io/kube-controller-managerv1.15.1
k8s.gcr.io/kube-apiserverv1.15.1
quay.io/calico/nodev3.1.6
quay.io/calico/cniv3.1.6
quay.io/calico/kube-controllersv3.1.6
k8s.gcr.io/coredns1.3.1
k8s.gcr.io/etcd3.3.10
quay.io/calico/nodev3.1.0
quay.io/calico/cniv3.1.0
quay.io/calico/kube-controllersv3.1.0
k8s.gcr.io/pause3.1
一、准备工作

建议每个虚拟机的配置如下:

内存处理器个数
2048M2

K8S的各个节点配置情况:

hostnameip addr
k8s-node1192.168.10.9
k8s-node2192.168.10.10
k8s-node3192.168.10.11

首先开启我们的linux的安装步骤。


设置内存大小:我这里设置4G


虚拟磁盘动态分配:

虚拟硬盘设置100G大小:

选着Centos-7-X86_64-1511.iso镜像盘:

处理器数量大小设置为2:

整个linux的操作系统安装较为简单,这里不是本内容重点,就不一一介绍了,若安装过程遇到问题,请移步:https://blog.csdn.net/qq_28513801/article/details/90143552

等待安装完成之后,修改一下网卡配置文件,然后重启网卡。这里可以直接使用vi 编辑配置文件,也可以更快速的利用sed修改。

[root@localhost ~]# sed -i 's/^ONBOOT=no/ONBOOT=yes/g'  /etc/sysconfig/network-scripts/ifcfg-enp0s3
[root@localhost ~]# /etc/init.d/network restart

如下图所示:

为了使用linux系统方便,我们直接使用终端工具Secure CRT进行连接操作。由于我们安装k8s时需要使用因特网,这里就使用了NAT网络,那么我们可以打开我们的虚拟机,设置一个端口转发,来便捷操作LINUX系统。

点击端口转发,设置一下端口,这里要避开常用的端口。

设置好了端口号之后,就可以使用crt进行连接了,添加一个规则,这里使用真实的物理机端口2222来映射到虚拟机的22端口:

由于进行了端口转发,那么ip地址就使用本地地址127.0.0.1,端口号不在是22,而是我们设置的2222.注意,因为端口是映射到宿主机上的,所以主机地址要填写为127.0.0.1:2222

点击接受并保存

输入我们的密码

然后进行一些简单设置:防止乱码,设置成UTF-8编码


这已经正常连接了

然后修改我们的主机名为k8s-node1

[root@localhost ~]# hostnamectl set-hostname k8s-node1
[root@localhost ~]# bash
[root@k8s-node1 ~]# 

1 开启安装之路

不建议使用CentOS 7 自带的yum源,因为安装软件和依赖时会非常慢甚至超时失败。这里,我们使用阿里云的源予以替换,执行如下命令,替换文件/etc/yum.repos.d/CentOS-Base.repo:

[root@k8s-node1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
bash: wget: command not found


这里由于我采用最小化安装,所以不带wget命令,那么我们先安装一下该命令。
[root@k8s-node1 ~]# yum search wget
Loaded plugins: fastestmirror
base                                                                                                                      | 3.6 kB  00:00:00     
extras                                                                                                                    | 3.4 kB  00:00:00     
updates                                                                                                                   | 3.4 kB  00:00:00     
(1/4): base/7/x86_64/group_gz                                                                                             | 166 kB  00:00:00     
(2/4): extras/7/x86_64/primary_db                                                                                         | 205 kB  00:00:01     
(3/4): base/7/x86_64/primary_db                                                                                           | 6.0 MB  00:00:01     
(4/4): updates/7/x86_64/primary_db                                                                                        | 7.4 MB  00:00:03     
Determining fastest mirrors
 * base: mirrors.163.com
 * extras: mirrors.neusoft.edu.cn
 * updates: mirrors.163.com
=============================================================== N/S matched: wget ===============================================================
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols

  Name and summary matches only, use "search all" for everything.
[root@k8s-node1 ~]# yum install -y wget


安装完成之后,重新执行命令:

[root@k8s-node1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
--2019-08-01 07:16:22--  http://mirrors.aliyun.com/repo/Centos-7.repo
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 150.138.121.102, 150.138.121.100, 150.138.121.98, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|150.138.121.102|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2523 (2.5K) [application/octet-stream]
Saving to:/etc/yum.repos.d/CentOS-Base.repo’

100%[=======================================================================================================>] 2,523       --.-K/s   in 0s      

2019-08-01 07:16:22 (287 MB/s) -/etc/yum.repos.d/CentOS-Base.repo’ saved [2523/2523]

[root@k8s-node1 ~]# 

[root@k8s-node1 ~]# yum makecache     #建立一个缓存
Loaded plugins: fastestmirror
base                                                                                                                      | 3.6 kB  00:00:00     
extras                                                                                                                    | 3.4 kB  00:00:00     
updates                                                                                                                   | 3.4 kB  00:00:00     
(1/8): extras/7/x86_64/prestodelta                                                                                        |  65 kB  00:00:00     
(2/8): extras/7/x86_64/other_db                                                                                           | 127 kB  00:00:00     
(3/8): extras/7/x86_64/filelists_db                                                                                       | 246 kB  00:00:00     
(4/8): base/7/x86_64/other_db                                                                                             | 2.6 MB  00:00:01     
(5/8): updates/7/x86_64/prestodelta                                                                                       | 945 kB  00:00:01     
(6/8): base/7/x86_64/filelists_db                                                                                         | 7.1 MB  00:00:03     
(7/8): updates/7/x86_64/other_db                                                                                          | 764 kB  00:00:01     
(8/8): updates/7/x86_64/filelists_db                                                                                      | 5.2 MB  00:00:03     
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Metadata Cache Created


1.2 关闭防火墙

防火墙一定要提前关闭,否则在后续安装K8S集群的时候是个trouble maker。执行下面语句关闭,并禁用开机启动:

[root@k8s-node1 ~]#  systemctl stop firewalld & systemctl disable firewalld
[1] 17699
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@k8s-node1 ~]# 

1.3 关闭Swap

类似ElasticSearch集群,在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响性能以及稳定性。这里,我们可以提前进行设置:

执行swapoff -a可临时关闭,但系统重启后恢复

[root@k8s-node1 ~]# swapoff -a
[1]+  Done                    systemctl stop firewalld
[root@k8s-node1 ~]# 

编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭,如下所示:

[root@k8s-node1 ~]# vi /etc/fstab 
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=dedcd30c-93a8-4e26-b111-d7c68a752bf9 /boot                   xfs     defaults        0 0
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
~


或直接执行:sed -i '/ swap / s/^/#/' /etc/fstab

关闭成功后,使用top命令查看,如下图所示表示正常:

2 安装Docker

当然,安装K8S必须要先安装Docker。这里,我们使用yum方式安装Docker社区最新版。Docker官方文档是最好的教材:
https://docs.docker.com/install/linux/docker-ce/centos/#prerequisites
但由于方教授的防火墙,文档网站经常无法查看,并且使用yum安装也经常会超时失败。我们使用如下方式解决:

2.1 添加仓库

添加阿里云的Docker仓库:

[root@k8s-node1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
bash: yum-config-manager: command not found   
如果出现上面报错,那么我们就安装该命令

[root@k8s-node1 ~]# yum search yum-config-manager
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
========================================================== Matched: yum-config-manager ==========================================================
yum-utils.noarch : Utilities based around the yum package manager
[root@k8s-node1 ~]# yum install -y yum-utils.noarch  #安装该命令

重新执行该命令:
[root@k8s-node1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@k8s-node1 ~]# yum makecache



2.2 安装Docker

执行以下命令,安装最新版Docker:

[root@k8s-node1 ~]# yum install docker-ce -y 

出现如下则已安装:

安装完成后,查询下docker版本:运行docker --version,可以看到安装了截止目前最新的19.03.1版本:

[root@k8s-node1 ~]# docker --version
Docker version 19.03.1, build 74b1e89

2.3 启动Docker

启动Docker服务并激活开机启动:

[root@k8s-node1 ~]# systemctl start docker & systemctl enable docker
[1] 20629
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@k8s-node1 ~]# 

运行一条命令验证一下:

[root@k8s-node1 ~]# docker run hello-world

出现如下代表成功启动:

下面将详细介绍在Node1上安装Kubernetes的过程,安装完毕后,再进行虚拟机的复制出Node2、Node3即可。

我们将现有的虚拟机称之为Node1,用作主节点。为了减少工作量,在Node1安装Kubernetes后,我们利用VirtualBox的虚拟机复制功能,复制出两个完全一样的虚拟机作为工作节点。三者角色为:

k8s-node1:Master
k8s-node2:Woker
k8s-node3:Woker

2 安装Kubernetes

官方文档永远是最好的参考资料:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/ 仅供参考

2.1 配置K8S的yum源

官方仓库无法使用,建议使用阿里源的仓库,执行以下命令添加kubernetes.repo仓库:

[root@k8s-node1 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
> enabled=1
> gpgcheck=0
> repo_gpgcheck=0
> gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF
[root@k8s-node1 ~]# 
2.2 关闭SeLinux

执行:setenforce 0

[root@k8s-node1 ~]# setenforce 0
[root@k8s-node1 ~]# getenforce 
Permissive

一个小建议

这里建议如果做高可用的话,要打开IP_VS模块
因为:pod的负载均衡是用kube-proxy来实现的,实现方式有两种,一种是默认的iptables,一种是ipvs,ipvs比iptable的性能更好而已。
后面master的高可用和集群服务的负载均衡要用到ipvs,所以加载内核的以下模块

需要开启的模块是
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4

检查有没有开启
cut -f1 -d " "  /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4

没有的话,使用以下命令加载
[root@k8s-node1 ~]# modprobe -- ip_vs
[root@k8s-node1 ~]# modprobe -- ip_vs_rr
[root@k8s-node1 ~]# modprobe -- ip_vs_wrr
[root@k8s-node1 ~]# modprobe -- ip_vs_sh
[root@k8s-node1 ~]# modprobe -- nf_conntrack_ipv4

下面继续进行我们的安装

2.3 安装K8S组件

执行以下命令安装 kubelet、kubeadm、kubectl :

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

2.4 配置kubelet的cgroup drive

确保docker 的cgroup drive 和kubelet的cgroup drive一样:

[root@k8s-node1 ~]# docker info | grep -i cgroup
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
         Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
 Cgroup Driver: cgroupfs
[root@k8s-node1 ~]# 

如图所示:

然后再查看我们的kubectl的Cgroup。

[root@k8s-node1 ~]# cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
cat: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf: No such file or directory

如果提示找不到该文件,就再去我们的:/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 

[root@k8s-node1 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin以上是关于K8S最新版本集群部署超详细(k8s版本1.5.1)docker 版本19.03.1以及基本操作和服务介绍。的主要内容,如果未能解决你的问题,请参考以下文章

云原生 | kubernetes - kubeadm部署k8s集群(超详细)

二进制方式部署k8s集群(超详细)

k8s/kubeadm 生产环境高可用集群部署

云原生centos7搭建安装k8s集群 v1.25版本详细教程实战

kubeadm快速部署K8S 1.20集群

K8s超详细安装部署流程