在CentOS 7上部署kubernetes v1.18

前置准备

官方文档指出k8s在安装kubeadm时需要使用iptables作为后端,但CentOS 8已经使用nftable无法切换,存在兼容性问题!

本次采用网络部署,需要:

  1. 梯子,docker和k8s的安装包基本都在需要(当然也可以准备下载安装包或者切换到阿里源,但本次不采用,增加部署的复杂度)
  2. 三台安装了CentOS 7的虚拟机,均连接好网络

确保 iptables 工具不使用 nftables 后端
在 Linux 中,nftables 当前可以作为内核 iptables 子系统的替代品。 iptables 工具可以充当兼容性层,其行为类似于 iptables 但实际上是在配置 nftables。 nftables 后端与当前的 kubeadm 软件包不兼容:它会导致重复防火墙规则并破坏 kube-proxy。
如果您系统的 iptables 工具使用 nftables 后端,则需要把 iptables 工具切换到“旧版”模式来避免这些问题。 默认情况下,至少在 Debian 10 (Buster)、Ubuntu 19.04、Fedora 29 和较新的发行版本中会出现这种问题。RHEL 8 不支持切换到旧版本模式,因此与当前的 kubeadm 软件包不兼容

目录:

  • 一、安装Docker【每台host上均需要执行】
  • 1.1、卸载旧版本(本次为新host无需卸载)
  • 1.2、安装存储库(在新host上首次安装Docker CE前,需要设置Docker存储库,之后可从存储库安装和更新Docker)
  • 1.3、安装 Docker CE
  • 1.4、设置开机自启动及启动docker
  • 1.5、修改docker cgroup驱动,与k8s一致,使用systemd
  • 二、安装kubelet、kubeadm和kubectl【每台host上都需要安装】
  • 2.1前置准备
  • 2.2安装kubectl、kubelet、kubeadm
  • 三、用kubeadm创建Cluster【仅仅master的host需要运行】
  • 3.1初始化Master
  • 3.2、配置kubectl
  • 3.3、安装Pod网络
  • 四、添加其他节点到Cluster上
  • 4.1、将其他节点注册到cluster上【在非master的host上执行】
  • 4.2、验证

一、安装Docker【每台host上均需要执行】

k8s官方文档提供的docker安装及配置

1.1、卸载旧版本(本次为新host无需卸载)

Docker的旧版本被称为docker或docker-engine。 如果安装了这些,请卸载它们以及关联的依赖关系

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

1.2、安装存储库(在新host上首次安装Docker CE前,需要设置Docker存储库,之后可从存储库安装和更新Docker)

1.2.0确保 yum 包更新到最新

sudo yum update

1.2.1安装必须的包。yum-utils提供了yum-config-manager实用程序,并且device-mapper-persistent-data和lvm2需要devicemapper存储驱动程序。

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
[woods@k8s-host1 ~]$ sudo yum install -y yum-utils \
>   device-mapper-persistent-data \
>   lvm2
[sudo] woods 的密码:
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.bfsu.edu.cn
软件包 yum-utils-1.1.31-54.el7_8.noarch 已安装并且是最新版本
软件包 device-mapper-persistent-data-0.8.5-2.el7.x86_64 已安装并且是最新版本
软件包 7:lvm2-2.02.186-7.el7_8.2.x86_64 已安装并且是最新版本
无须任何处理

1.2.2使用以下命令设置稳定存储库

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
[woods@k8s-host1 ~]$ sudo yum-config-manager \
>     --add-repo \
>     https://download.docker.com/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

2.3查看docker版本(使用排序-r命令对结果进行排序,版本号由最高到最低,并被截断。)

 sudo yum list docker-ce --showduplicates | sort -r
[woods@k8s-host1 ~]$  sudo yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror, langpacks
可安装的软件包
 * updates: mirrors.bfsu.edu.cn
Loading mirror speeds from cached hostfile
 * extras: mirrors.aliyun.com
docker-ce.x86_64            3:19.03.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.10-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64            18.06.3.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.2.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable
 * base: mirrors.aliyun.com

1.3、安装 Docker CE

1.3.1.安装最新版本的Docker CE,或安装特定版本。

#最新版本
sudo yum install docker-ce
#特定版本,需要使用完全限定的包名,eg:docker-ce-18.06.3.ce
sudo yum install docker-ce-18.06.3.ce
[woods@k8s-host1 ~]$  sudo yum install docker-ce
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.bfsu.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 docker-ce.x86_64.3.19.03.10-3.el7 将被 安装
--> 正在处理依赖关系 container-selinux >= 2:2.74,它被软件包 3:docker-ce-19.03.10-3.el7.x86_64 需要
--> 正在处理依赖关系 containerd.io >= 1.2.2-3,它被软件包 3:docker-ce-19.03.10-3.el7.x86_64 需要
--> 正在处理依赖关系 docker-ce-cli,它被软件包 3:docker-ce-19.03.10-3.el7.x86_64 需要
--> 正在检查事务
---> 软件包 container-selinux.noarch.2.2.119.1-1.c57a6f9.el7 将被 安装
---> 软件包 containerd.io.x86_64.0.1.2.13-3.2.el7 将被 安装
---> 软件包 docker-ce-cli.x86_64.1.19.03.10-3.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

============================================================================================================================================
 Package                           架构                   版本                                       源                                大小
============================================================================================================================================
正在安装:
 docker-ce                         x86_64                 3:19.03.10-3.el7                           docker-ce-stable                  24 M
为依赖而安装:
 container-selinux                 noarch                 2:2.119.1-1.c57a6f9.el7                    extras                            40 k
 containerd.io                     x86_64                 1.2.13-3.2.el7                             docker-ce-stable                  25 M
 docker-ce-cli                     x86_64                 1:19.03.10-3.el7                           docker-ce-stable                  38 M

事务概要
============================================================================================================================================
安装  1 软件包 (+3 依赖软件包)

总下载量:88 M
安装大小:360 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): container-selinux-2.119.1-1.c57a6f9.el7.noarch.rpm                                                            |  40 kB  00:00:00     
containerd.io-1.2.13-3.2.el7.x FAILED                                                                     ]   56 B/s | 1.8 MB 443:32:37 ETA 
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm: [Errno 12] Timeout on https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds')
正在尝试其它镜像。
docker-ce-19.03.10-3.el7.x86_6 FAILED                                                                     ] 212 kB/s |  15 MB  00:05:51 ETA 
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.10-3.el7.x86_64.rpm: [Errno 12] Timeout on https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.10-3.el7.x86_64.rpm: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds')
正在尝试其它镜像。
warning: /var/cache/yum/x86_64/7/docker-ce-stable/packages/docker-ce-cli-19.03.10-3.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
docker-ce-cli-19.03.10-3.el7.x86_64.rpm 的公钥尚未安装
(2/4): docker-ce-cli-19.03.10-3.el7.x86_64.rpm                                                                       |  38 MB  00:04:56     
(3/4): containerd.io-1.2.13-3.2.el7.x86_64.rpm                                                                       |  25 MB  00:02:13     
(4/4): docker-ce-19.03.10-3.el7.x86_64.rpm                                                                           |  24 MB  00:03:35     
--------------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                        118 kB/s |  88 MB  00:12:43     
从 https://download.docker.com/linux/centos/gpg 检索密钥
导入 GPG key 0x621E9F35:
 用户ID     : "Docker Release (CE rpm) <docker@docker.com>"
 指纹       : 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35
 来自       : https://download.docker.com/linux/centos/gpg
是否继续?[y/N]:y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch                                                                        1/4 
  正在安装    : containerd.io-1.2.13-3.2.el7.x86_64                                                                                     2/4 
  正在安装    : 1:docker-ce-cli-19.03.10-3.el7.x86_64                                                                                   3/4 
  正在安装    : 3:docker-ce-19.03.10-3.el7.x86_64                                                                                       4/4 
  验证中      : 3:docker-ce-19.03.10-3.el7.x86_64                                                                                       1/4 
  验证中      : 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch                                                                        2/4 
  验证中      : 1:docker-ce-cli-19.03.10-3.el7.x86_64                                                                                   3/4 
  验证中      : containerd.io-1.2.13-3.2.el7.x86_64                                                                                     4/4 

已安装:
  docker-ce.x86_64 3:19.03.10-3.el7                                                                                                         

作为依赖被安装:
  container-selinux.noarch 2:2.119.1-1.c57a6f9.el7     containerd.io.x86_64 0:1.2.13-3.2.el7     docker-ce-cli.x86_64 1:19.03.10-3.el7    

完毕!

1.4、设置开机自启动及启动docker

#启动docker
systemctl start docker
#设置开机启动docker
systemctl enable docker
#查看docker是否运行
systemctl status docker
[woods@k8s-host1 ~]$ systemctl start docker
[woods@k8s-host1 ~]$ systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[woods@k8s-host1 ~]$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 六 2020-05-30 14:55:08 CST; 28s ago
     Docs: https://docs.docker.com
 Main PID: 85200 (dockerd)
   CGroup: /system.slice/docker.service
           └─85200 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

5月 30 14:55:07 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:07.881068173+08:00" level=info msg="scheme \"unix\" not register...le=grpc
5月 30 14:55:07 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:07.881083114+08:00" level=info msg="ccResolverWrapper: sending u...le=grpc
5月 30 14:55:07 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:07.881090513+08:00" level=info msg="ClientConn switching balance...le=grpc
5月 30 14:55:07 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:07.895660619+08:00" level=info msg="Loading containers: start."
5月 30 14:55:08 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:08.088192255+08:00" level=info msg="Default bridge (docker0) is ...ddress"
5月 30 14:55:08 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:08.216881984+08:00" level=info msg="Loading containers: done."
5月 30 14:55:08 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:08.231973209+08:00" level=info msg="Docker daemon" commit=9424ae...9.03.10
5月 30 14:55:08 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:08.232260324+08:00" level=info msg="Daemon has completed initialization"
5月 30 14:55:08 k8s-host1 dockerd[85200]: time="2020-05-30T14:55:08.245414500+08:00" level=info msg="API listen on /var/run/docker.sock"
5月 30 14:55:08 k8s-host1 systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

1.5、修改docker cgroup驱动,与k8s一致,使用systemd

cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

# Restart Docker
systemctl daemon-reload
systemctl restart docker

二、安装kubelet、kubeadm和kubectl【每台host上都需要安装】

  • kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器
  • kubeadm 用于初始化 Cluster
  • kubectl 是 Kubernetes 命令行工具,通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

2.1前置准备

2.1.1通过运行命令 setenforce 0 和 sed ... 将 SELinux 设置为 permissive 模式可以有效的将其禁用。 这是允许容器访问主机文件系统所必须的,例如正常使用 pod 网络。 您必须这么做,直到 kubelet 做出升级支持 SELinux 为止

[woods@k8s-host1 ~]$ sudo setenforce 0
[woods@k8s-host1 ~]$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

2.1.2一些 RHEL/CentOS 7 的用户曾经遇到过问题:由于 iptables 被绕过而导致流量无法正确路由的问题。应该确保 在 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 被设置为 1

#需要 root权限
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
[root@k8s-host1 woods]# cat <<EOF >  /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@k8s-host1 woods]# sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /usr/lib/sysctl.d/60-libvirtd.conf ...
fs.aio-max-nr = 1048576
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
* Applying /etc/sysctl.conf ...

2.1.3关闭swap和注释swap分区

#如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区
sudo swapoff -a
#为了防止开机自动挂载 swap 分区,可以注释  /etc/fstab  中相应的条目:
sudo vi /etc/fstab
[woods@k8s-host1 ~]$ sudo swapoff -a
[woods@k8s-host1 ~]$ sudo vi /etc/fstab
[woods@k8s-host1 ~]$ cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sat May 30 12:42:41 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=154bcd19-085c-4052-9c9e-1a24b8665f8b /boot                   xfs     defaults        0 0
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

2.2安装kubectl、kubelet、kubeadm

#最好root下安装
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubelet kubeadm kubectl –disableexcludes=kubernetes

systemctl enable kubelet
[root@k8s-host1 woods]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
> enabled=1
> gpgcheck=1
> repo_gpgcheck=1
> gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
> EOF
[root@k8s-host1 woods]# yum install -y kubelet kubeadm kubectl –disableexcludes=kubernetes
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                                                                 | 3.6 kB  00:00:00     
docker-ce-stable                                                                                                     | 3.5 kB  00:00:00     
extras                                                                                                               | 2.9 kB  00:00:00     
kubernetes/signature                                                                                                 |  454 B  00:00:00     
从 https://packages.cloud.google.com/yum/doc/yum-key.gpg 检索密钥
导入 GPG key 0xA7317B0F:
 用户ID     : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>"
 指纹       : d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f
 来自       : https://packages.cloud.google.com/yum/doc/yum-key.gpg
从 https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg 检索密钥
kubernetes/signature                                                                                                 | 1.4 kB  00:00:00 !!! 
updates                                                                                                              | 2.9 kB  00:00:00     
kubernetes/primary                                                                                                   |  69 kB  00:00:00     
kubernetes                                                                                                                          505/505
正在解决依赖关系
--> 正在检查事务
---> 软件包 kubeadm.x86_64.0.1.18.3-0 将被 安装
--> 正在处理依赖关系 kubernetes-cni >= 0.7.5,它被软件包 kubeadm-1.18.3-0.x86_64 需要
--> 正在处理依赖关系 cri-tools >= 1.13.0,它被软件包 kubeadm-1.18.3-0.x86_64 需要
---> 软件包 kubectl.x86_64.0.1.18.3-0 将被 安装
---> 软件包 kubelet.x86_64.0.1.18.3-0 将被 安装
--> 正在处理依赖关系 socat,它被软件包 kubelet-1.18.3-0.x86_64 需要
--> 正在处理依赖关系 conntrack,它被软件包 kubelet-1.18.3-0.x86_64 需要
--> 正在检查事务
---> 软件包 conntrack-tools.x86_64.0.1.4.4-7.el7 将被 安装
--> 正在处理依赖关系 libnetfilter_cttimeout.so.1(LIBNETFILTER_CTTIMEOUT_1.1)(64bit),它被软件包 conntrack-tools-1.4.4-7.el7.x86_64 需要
--> 正在处理依赖关系 libnetfilter_cttimeout.so.1(LIBNETFILTER_CTTIMEOUT_1.0)(64bit),它被软件包 conntrack-tools-1.4.4-7.el7.x86_64 需要
--> 正在处理依赖关系 libnetfilter_cthelper.so.0(LIBNETFILTER_CTHELPER_1.0)(64bit),它被软件包 conntrack-tools-1.4.4-7.el7.x86_64 需要
--> 正在处理依赖关系 libnetfilter_queue.so.1()(64bit),它被软件包 conntrack-tools-1.4.4-7.el7.x86_64 需要
--> 正在处理依赖关系 libnetfilter_cttimeout.so.1()(64bit),它被软件包 conntrack-tools-1.4.4-7.el7.x86_64 需要
--> 正在处理依赖关系 libnetfilter_cthelper.so.0()(64bit),它被软件包 conntrack-tools-1.4.4-7.el7.x86_64 需要
---> 软件包 cri-tools.x86_64.0.1.13.0-0 将被 安装
---> 软件包 kubernetes-cni.x86_64.0.0.7.5-0 将被 安装
---> 软件包 socat.x86_64.0.1.7.3.2-2.el7 将被 安装
--> 正在检查事务
---> 软件包 libnetfilter_cthelper.x86_64.0.1.0.0-11.el7 将被 安装
---> 软件包 libnetfilter_cttimeout.x86_64.0.1.0.0-7.el7 将被 安装
---> 软件包 libnetfilter_queue.x86_64.0.1.0.2-2.el7_2 将被 安装
--> 解决依赖关系完成

依赖关系解决

============================================================================================================================================
 Package                                   架构                      版本                               源                             大小
============================================================================================================================================
正在安装:
 kubeadm                                   x86_64                    1.18.3-0                           kubernetes                    8.8 M
 kubectl                                   x86_64                    1.18.3-0                           kubernetes                    9.5 M
 kubelet                                   x86_64                    1.18.3-0                           kubernetes                     21 M
为依赖而安装:
 conntrack-tools                           x86_64                    1.4.4-7.el7                        base                          187 k
 cri-tools                                 x86_64                    1.13.0-0                           kubernetes                    5.1 M
 kubernetes-cni                            x86_64                    0.7.5-0                            kubernetes                     10 M
 libnetfilter_cthelper                     x86_64                    1.0.0-11.el7                       base                           18 k
 libnetfilter_cttimeout                    x86_64                    1.0.0-7.el7                        base                           18 k
 libnetfilter_queue                        x86_64                    1.0.2-2.el7_2                      base                           23 k
 socat                                     x86_64                    1.7.3.2-2.el7                      base                          290 k

事务概要
============================================================================================================================================
安装  3 软件包 (+7 依赖软件包)

总下载量:55 M
安装大小:246 M
Downloading packages:
(1/10): conntrack-tools-1.4.4-7.el7.x86_64.rpm                                                                       | 187 kB  00:00:00     
warning: /var/cache/yum/x86_64/7/kubernetes/packages/a23839a743e789babb0ce912fa440f6e6ceb15bc5db42dd91aa0838c994b3452-kubeadm-1.18.3-0.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 3e1ba8d5: NOKEY
a23839a743e789babb0ce912fa440f6e6ceb15bc5db42dd91aa0838c994b3452-kubeadm-1.18.3-0.x86_64.rpm 的公钥尚未安装
(2/10): a23839a743e789babb0ce912fa440f6e6ceb15bc5db42dd91aa0838c994b3452-kubeadm-1.18.3-0.x86_64.rpm                 | 8.8 MB  00:00:13     
(3/10): 14bfe6e75a9efc8eca3f638eb22c7e2ce759c67f95b43b16fae4ebabde1549f3-cri-tools-1.13.0-0.x86_64.rpm               | 5.1 MB  00:00:16     
(4/10): cd5d6980c3e1b15de222db08729eff40f7031b7fa56c71ae3e28e420ba9678cd-kubectl-1.18.3-0.x86_64.rpm                 | 9.5 MB  00:00:15     
(5/10): libnetfilter_cthelper-1.0.0-11.el7.x86_64.rpm                                                                |  18 kB  00:00:00     
(6/10): libnetfilter_cttimeout-1.0.0-7.el7.x86_64.rpm                                                                |  18 kB  00:00:01     
(7/10): socat-1.7.3.2-2.el7.x86_64.rpm                                                                               | 290 kB  00:00:01     
(8/10): libnetfilter_queue-1.0.2-2.el7_2.x86_64.rpm                                                                  |  23 kB  00:00:03     
(9/10): 548a0dcd865c16a50980420ddfa5fbccb8b59621179798e6dc905c9bf8af3b34-kubernetes-cni-0.7.5-0.x86_64.rpm           |  10 MB  00:00:20     
(10/10): d1a0216cfab2fb28e82be531327ebde9a554bb6d33e3c8313acc9bc728ba59d1-kubelet-1.18.3-0.x86_64.rpm                |  21 MB  00:00:42     
--------------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                        963 kB/s |  55 MB  00:00:58     
从 https://packages.cloud.google.com/yum/doc/yum-key.gpg 检索密钥
导入 GPG key 0xA7317B0F:
 用户ID     : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>"
 指纹       : d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f
 来自       : https://packages.cloud.google.com/yum/doc/yum-key.gpg
从 https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg 检索密钥
导入 GPG key 0x3E1BA8D5:
 用户ID     : "Google Cloud Packages RPM Signing Key <gc-team@google.com>"
 指纹       : 3749 e1ba 95a8 6ce0 5454 6ed2 f09c 394c 3e1b a8d5
 来自       : https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : libnetfilter_cttimeout-1.0.0-7.el7.x86_64                                                                              1/10 
  正在安装    : socat-1.7.3.2-2.el7.x86_64                                                                                             2/10 
  正在安装    : cri-tools-1.13.0-0.x86_64                                                                                              3/10 
  正在安装    : kubectl-1.18.3-0.x86_64                                                                                                4/10 
  正在安装    : libnetfilter_queue-1.0.2-2.el7_2.x86_64                                                                                5/10 
  正在安装    : libnetfilter_cthelper-1.0.0-11.el7.x86_64                                                                              6/10 
  正在安装    : conntrack-tools-1.4.4-7.el7.x86_64                                                                                     7/10 
  正在安装    : kubernetes-cni-0.7.5-0.x86_64                                                                                          8/10 
  正在安装    : kubelet-1.18.3-0.x86_64                                                                                                9/10 
  正在安装    : kubeadm-1.18.3-0.x86_64                                                                                               10/10 
  验证中      : kubelet-1.18.3-0.x86_64                                                                                                1/10 
  验证中      : libnetfilter_cthelper-1.0.0-11.el7.x86_64                                                                              2/10 
  验证中      : conntrack-tools-1.4.4-7.el7.x86_64                                                                                     3/10 
  验证中      : libnetfilter_queue-1.0.2-2.el7_2.x86_64                                                                                4/10 
  验证中      : kubeadm-1.18.3-0.x86_64                                                                                                5/10 
  验证中      : kubectl-1.18.3-0.x86_64                                                                                                6/10 
  验证中      : cri-tools-1.13.0-0.x86_64                                                                                              7/10 
  验证中      : kubernetes-cni-0.7.5-0.x86_64                                                                                          8/10 
  验证中      : socat-1.7.3.2-2.el7.x86_64                                                                                             9/10 
  验证中      : libnetfilter_cttimeout-1.0.0-7.el7.x86_64                                                                             10/10 

已安装:
  kubeadm.x86_64 0:1.18.3-0                     kubectl.x86_64 0:1.18.3-0                     kubelet.x86_64 0:1.18.3-0                    

作为依赖被安装:
  conntrack-tools.x86_64 0:1.4.4-7.el7           cri-tools.x86_64 0:1.13.0-0                    kubernetes-cni.x86_64 0:0.7.5-0             
  libnetfilter_cthelper.x86_64 0:1.0.0-11.el7    libnetfilter_cttimeout.x86_64 0:1.0.0-7.el7    libnetfilter_queue.x86_64 0:1.0.2-2.el7_2   
  socat.x86_64 0:1.7.3.2-2.el7                  

完毕!

三、用kubeadm创建Cluster【仅仅master的host需要运行】

3.1初始化Master

kubeadm init --apiserver-advertise-address 192.168.137.21 --pod-network-cidr=10.244.0.0/16
  • --apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface
  • --pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr 有自己的要求,这里设置为 10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR
[root@k8s-host1 woods]# kubeadm init --apiserver-advertise-address 192.168.137.21 --pod-network-cidr=10.244.0.0/16
W0530 16:15:05.487513   87490 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.3
[preflight] Running pre-flight checks
    [WARNING Hostname]: hostname "k8s-host1" could not be reached
    [WARNING Hostname]: hostname "k8s-host1": lookup k8s-host1 on 192.168.137.1:53: no such host
    [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-host1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.137.21]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-host1 localhost] and IPs [192.168.137.21 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-host1 localhost] and IPs [192.168.137.21 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
W0530 16:22:07.804392   87490 manifests.go:225] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[control-plane] Creating static Pod manifest for "kube-scheduler"
W0530 16:22:07.805056   87490 manifests.go:225] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 20.502804 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.18" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-host1 as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node k8s-host1 as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: jj3yma.mhpv44juycfelre7
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.137.21:6443 --token jj3yma.mhpv44juycfelre7 \
    --discovery-token-ca-cert-hash sha256:73c888c25066386dc233d68ad7f424e792ab02340b54fba5250a3ffa1b92e28b 

3.2、配置kubectl

推荐使用Linux普通用户执行kubectl

[woods@k8s-host1 ~]$ su - woods
密码:
上一次登录:六 5月 30 12:51:28 CST 2020:0 上
[woods@k8s-host1 ~]$ mkdir -p $HOME/.kube
[woods@k8s-host1 ~]$  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[sudo] woods 的密码:
[woods@k8s-host1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
[woods@k8s-host1 ~]$ echo "source <(kubectl completion bash)" >> ~/.bashrc

3.3、安装Pod网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[woods@k8s-host1 ~]$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created

四、添加其他节点到Cluster上

4.1、将其他节点注册到cluster上【在非master的host上执行】

可以用kubectl token list查看token,kubeadm初始化时生成的token只有24小时有效期,过后需要重新生成

#需要root
kubeadm join 192.168.137.21:6443 --token jj3yma.mhpv44juycfelre7   \
  --discovery-token-ca-cert-hash sha256:73c888c25066386dc233d68ad7f424e792ab02340b54fba5250a3ffa1b92e28b 

[root@k8s-host2 woods]# kubeadm join 192.168.137.21:6443 --token jj3yma.mhpv44juycfelre7     --discovery-token-ca-cert-hash sha256:73c888c25066386dc233d68ad7f424e792ab02340b54fba5250a3ffa1b92e28b 
W0530 18:14:58.284790   68181 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
    [WARNING Hostname]: hostname "k8s-host2" could not be reached
    [WARNING Hostname]: hostname "k8s-host2": lookup k8s-host2 on 192.168.137.1:53: no such host
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.18" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

41.1、

#查看--discovery-token-ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
#查看token
kubeadm token list
[woods@host1 ~]$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
acdf23472a1650791d3297b4670a428b5dc035900e7c7a7bbfd2e333f8080fd1
[woods@host1 ~]$ kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
ukjrrv.mli0o16jpj0sgzed   23h         2020-05-31T23:00:21+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

4.2、验证

查看节点

[woods@k8s-host1 ~]$ kubectl get nodes
NAME        STATUS     ROLES    AGE     VERSION
k8s-host1   Ready      master   117m    v1.18.3
k8s-host2   NotReady   <none>   5m      v1.18.3
k8s-host3   Ready      <none>   9m21s   v1.18.3

查看pod

[woods@k8s-host1 ~]$ kubectl get pod --all-namespaces
NAMESPACE     NAME                                READY   STATUS     RESTARTS   AGE
kube-system   coredns-66bff467f8-8vf4r            1/1     Running    0          117m
kube-system   coredns-66bff467f8-jv5nr            1/1     Running    0          117m
kube-system   etcd-k8s-host1                      1/1     Running    0          117m
kube-system   kube-apiserver-k8s-host1            1/1     Running    0          117m
kube-system   kube-controller-manager-k8s-host1   1/1     Running    0          117m
kube-system   kube-flannel-ds-amd64-j2454         0/1     Init:0/1   0          4m50s
kube-system   kube-flannel-ds-amd64-jht6k         1/1     Running    0          82m
kube-system   kube-flannel-ds-amd64-tnlcf         1/1     Running    0          9m11s
kube-system   kube-proxy-b2jrk                    1/1     Running    0          4m50s
kube-system   kube-proxy-cz8ss                    1/1     Running    0          9m11s
kube-system   kube-proxy-dsmrn                    1/1     Running    0          117m
kube-system   kube-scheduler-k8s-host1            1/1     Running    0          117m
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342