注:本文参考https://blog.51cto.com/3241766/2405624进行实践。
我对k8s的知识不太了解,只是感兴趣想实践一下。这篇记录只是想根据自己搭建的时候遇到的问题进行一些补充。大体步骤基本与原作者一致。

环境说明

主机名系统版本ip地址docker versionkubelet versionkubeadm versionkubectl versionflannel version备注
node02centos-release-7-7.1908.0.el7.centos.x86_64192.168.137.203Docker 18.09.6V1.14.2V1.14.2V1.14.2V0.11.0node节点

为什么我要用centos7.7呢,因为7.6的我没找到,只找到精简版,但是vm里面装不了。顺便附上7.7的下载地址http://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso
为什么我会从node02开始呢?因为我node01搭建成功之后才敢记录的。哈哈哈哈。。。

开始之前记得关闭防火墙哦,以免各种奇葩错误。

[root@centos7 ~]# systemctl stop firewalld
[root@centos7 ~]# systemctl disable firewalld
[root@centos7 ~]# setenforce 0
[root@centos7 ~]# sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@centos7 ~]# systemctl stop firewalld #临时关闭防火墙
[root@centos7 ~]# systemctl disable firewalld #永久防火墙
[root@centos7 ~]# setenforce 0    #临时关闭selinux
[root@centos7 ~]# sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #永久关闭(需重启系统)

一、Docker安装

所有节点都需要安装docker,我这是node节点 肯定要装了。

1. 安装依赖包

[root@centos7 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

在这里插入图片描述

2. 设置Docker源

[root@centos7 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

在这里插入图片描述

3. 安装Docker CE

3.1 docker安装版本查看

[root@centos7 ~]# yum list docker-ce --showduplicates | sort -r

在这里插入图片描述
最新版本跟作者当时写文章的时候不一样,但是我还是很老实地装了跟作者写的一样的版本,我是真的怂。
3.2 安装docker

[root@centos7 ~]# yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io

然后就可以进入一段漫长的等待了(可能是公司网太慢)
在这里插入图片描述

4. 启动Docker

[root@centos7 ~]# systemctl start docker
[root@centos7 ~]# systemctl enable docker

在这里插入图片描述

5. 命令补全

5.1 安装bash-completion

[root@centos7 ~]# yum -y install bash-completion

在这里插入图片描述
5.2 加载bash-completion

[root@centos7 /]# source /etc/profile.d/bash_completion.sh

6. 镜像加速

由于Docker Hub的服务器在国外,下载镜像会比较慢,可以配置镜像加速器。主要的加速器有:Docker官方提供的中国registry mirror、阿里云加速器、DaoCloud 加速器,本文以阿里加速器配置为例。
6.1 登陆阿里云容器模块
登陆地址为:https://cr.console.aliyun.com ,未注册的可以先注册阿里云账户
在这里插入图片描述
(很显然,我这里连图片都一起复制了 哈哈哈)
6.2 配置镜像加速器
配置daemon.json文件

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

重启服务

[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl restart docker

在这里插入图片描述
加速器配置完成

7. 验证

[root@centos7 ~]# docker --version
[root@centos7 ~]# docker run hello-world

在这里插入图片描述
通过查询docker版本和运行容器hello-world来验证docker是否安装成功。

二、k8s安装准备工作

!!!到了这里的时候,我才知道为什么我第一次安装master的时候拉取不到kubectl的那些镜像了!!!
我太粗心了。下面这句话 我当时应该是忽略了 直接没看到。

安装Centos是已经禁用了防火墙和selinux并设置了阿里源。master和node节点都执行本部分操作。

1. 配置主机名

1.1 修改主机名

[root@centos7 ~]# hostnamectl set-hostname node02
[root@centos7 ~]# more /etc/hostname             
node02

在这里插入图片描述
退出重新登陆即可显示新设置的主机名node02
1.2 修改hosts文件

[root@node02 ~]# cat >> /etc/hosts << EOF
> 192.168.137.201    master
> 192.168.137.202    node01
> 192.168.137.203    node02
> EOF

在这里插入图片描述

2. 验证mac地址uuid

[root@node02 ~]# cat /sys/class/net/ens33/address
[root@node02 ~]# cat /sys/class/dmi/id/product_uuid

保证各节点mac和uuid唯一

3. 禁用swap

3.1 临时禁用

[root@node02 ~]# swapoff -a

3.2 永久禁用
若需要重启后也生效,在禁用swap后还需修改配置文件/etc/fstab,注释swap

[root@node02 ~]# sed -i.bak '/swap/s/^/#/' /etc/fstab

4. 内核参数修改

4.1 临时修改

[root@node02 ~]# sysctl net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables = 1
[root@node02 ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-ip6tables = 1

4.2 永久修改

[root@node02 ~]# cat <<EOF >  /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@node02 ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

5. 修改Cgroup Driver

5.1 修改daemon.json
修改daemon.json,新增‘“exec-opts”: [“native.cgroupdriver=systemd”]’

[root@node02 ~]# vi /etc/docker/daemon.json
[root@node02 ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://jgw48re7.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

这是vi进去改,最好是重新写一份,上次忘了在第一个value后面加逗号
5.2 重新加载docker

[root@node02 ~]# systemctl daemon-reload
[root@node02 ~]# systemctl restart docker

修改cgroupdriver是为了消除告警:
[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/

我也不知道是什么警告 哈哈哈哈。

6. 设置kubernetes源

6.1 新增kubernetes源
(这里等下还要做解释)

[root@node02 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [k8s-node02]
> name=k8s-node02
> baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
> enabled=1
> gpgcheck=1
> repo_gpgcheck=1
> gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF


[] 中括号中的是repository id,唯一,用来标识不同仓库
name 仓库名称,自定义
baseurl 仓库地址
enable 是否启用该仓库,默认为1表示启用
gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了

6.2 更新缓存

[root@node02 ~]# yum clean all
[root@node02 ~]# yum -y makecache

我在yum -y makecache的时候出问题了,
在这里插入图片描述
说什么验证不通过,然后我就把验证给删掉了。删掉之后的内容如下:

[root@node02 ~]# cat  /etc/yum.repos.d/kubernetes.repo
[k8s-node02]
name=k8s-node02
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

去掉了验证的东西,然后再次执行下面的
更新缓存

[root@node02 ~]# yum clean all
[root@node02 ~]# yum -y makecache

三、Node节点安装

1. 版本查看

在这里插入图片描述
太多了,我们看到 1.14.2这里还是有的。
(原作者的话 :目前最新版是1.14.2,该版本支持的docker版本为1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09。)

2. 安装kubelet、kubeadm和kubectl

2.1 安装三个包

[root@node02 ~]# yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2

2.2 安装包说明

kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm 用于初始化集群,启动集群的命令工具
kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

---------从这下面开始,我就不知道需不需要了,但是我还是走了下面的流程----------
2.3 启动kubelet
启动kubelet并设置开机启动

[root@master ~]# systemctl enable kubelet && systemctl start kubelet

2.4 kubelet命令补全

[root@node02 ~]# echo "source <(kubectl completion bash)" >> ~/.bash_profile
[root@node02 ~]# source .bash_profile 

3. 下载镜像

Kubernetes几乎所有的安装组件和Docker镜像都放在goolge自己的网站上,直接访问可能会有网络问题,这里的解决办法是从阿里云镜像仓库下载镜像,拉取到本地以后改回默认的镜像tag。
3.1 镜像下载的脚本
这里警示自己一句 ,vi 创建新文件之后 一定要记得 按 i ,每次复制进去都蒙蔽为啥头上少了几行

[root@node02 k8s]# cat image.sh 
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.14.2
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
  docker pull $url/$imagename
  docker tag $url/$imagename k8s.gcr.io/$imagename
  docker rmi -f $url/$imagename
done

–我是创建了一个文件夹 名字叫 k8s --用来放k8s的东西
url为阿里云镜像仓库地址,version为安装的kubernetes版本。
3.2 下载镜像
运行脚本image.sh,下载指定版本的镜像

[root@node02 k8s]# ./image.sh
[root@node02 k8s]# docker images

在这里插入图片描述
好了,到这里差不多就搭建好了。接下来就差加入集群了。

我在这里开始把这个镜像给克隆了一份,为了方便以后节点的拓展,不知道这么做是不是有点傻缺。。

4. 加入集群

以下这些操作到Master节点上执行,我反是已经记录下来了。就不再执行了
在这里插入图片描述
node节点加入集群

kubeadm join 192.168.137.201:6443 --token zdxjqn.1c1flw1dalm6ziab --discovery-token-ca-cert-hash sha256:4a3683b35163964e25464d57a401c335f4160610e7e88f5cad8d535fec5ff72d

我的差不多就是这样的了。如果报错的话,就去master节点上看看 token 是不是过期了,然后那个密钥好像是不变的。

哦豁,这个时候去看下之前搭建好的Dashboard后台,发现node02已经有了。
在这里插入图片描述
那个已就绪是 false,这个是什么鬼?

后面好像发现出现这个问题是kube-flannel-ds这个东西搞得鬼,
我的解决方法在另外一篇文章里面(https://blog.csdn.net/qq_27156945/article/details/101779282)。其实就是重新进行一次加入集群的操作。

对了 这里还有一个大痛点就是重启之后好像就全崩了。。

Logo

开源、云原生的融合云平台

更多推荐