从零开始搭建kubernetes(二)_Kuboard可视化插件搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始搭建kubernetes(二)_Kuboard可视化插件搭建相关的知识,希望对你有一定的参考价值。

参考技术A

在上一篇文章中, 我们已经完成了集群的搭建. 接下来我们将进行 kuboard 可视化插件的搭建.
在此笔者强烈给大家推荐 kuboard , 功能不亚于阿里云的kubernetes可视化界面.
该插件运行运行在Docker容器中.在安装可视化之前, 我们需要安装Docker容器服务.

建议Master和Work节点都安装. 因为后期我们搭建Jenkins+Harbor+GitLab的CI/CD时需要Docker容器.

设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

设置镜像仓库

安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community
containerd.io在上一篇文章中的脚本文件已经自动安装, 所以这只需要安装docker-ce 和 docker-ce-cli

安装完成后启动Docker并设置开机启动

查看Docker状态

详细的安装教程可以参考 kuboard 官网. 笔者为了后期升级方便, 写了一个脚本文件. 如果大家觉得安装教程繁琐, 可以执行此脚本进行安装.

将以上脚本保存为名为install_or_update_kuboard.sh
命令行执行脚本, 输入需要暴露的端口号,公网IP和Kuboard版本号即可完成部署.

控制台输出如下

以后如果要升级Kuboard只需要再次执行此脚本, 输入新的版本号即可完成升级.

脚本安装完成后会在控制图输出访问地址. 在浏览器中访问得到如下页面.

点击图中的添加集群,弹出如下对话框

在Master节点执行以下命令, 获取kubeconfig内容.

将打印的所有内容复制到kubeconfig中. 之后点击确定. 完成集群的可视化配置.
最后附上集群概览

kuboard 的Ui和交互做的非常不错, 相信大家很快就会使用.
至此, 我们完成了kubernetes的集群搭建和可视化配置.

从零搭建kubernetes v1.18.6集群

目录

一、安装vmware 15 pro

二、安装centos 7

三、复制虚拟机

1) 复制二个节点命名为node1和node2

 2)  实现3个节点通信

 四、安装docker

五、安装kubernetes环境

1)  更改机器的hostname

2)  给每台机器配置主机解析

3)  同步三台机器的时间

4) 关闭swap

5) 关闭selinux

6) 配置网络

Ⅰ. 将每个节点上的流量链接到iptables

Ⅱ. 开启ipvs

六、构建kubernetes集群

使用kubeadm初始化k8s节点

踩坑指南


一、安装vmware 15 pro

vmware 15pro:

网盘链接:https://pan.baidu.com/s/1AJql4cp__6mPxMzwQMjecA 
提取码:9cny 

centos 7

链接:https://pan.baidu.com/s/1Ukgghq0-Grkmc76lJE6VEA 
提取码:yf3c 

二、安装centos 7

 

 

 

 采用桥接网络:

 

 vmdk文件放在刚安装的目录里即可:

 

 点击完成,继续编辑虚拟机, 选择centos7的iso镜像:

安装,选择第一个:

 选择中文:

 选择软件:

 安装桌面:

选择网络,因为网络是桥接的,ip地址与windows网络ip在同一个子网下, 

 

 windows系统的ip为:192.168.31.166

 设置root用户名和密码:

 也可以添加其他非root用户,设置完成后,等待安装完成即可:

 安装完成后,重启。

 点击同意许可: 

 

 设置密码:

 配置完成后,即可访问外网, 采用ifconfig命令查看:

三、复制虚拟机

1) 复制二个节点命名为node1和node2

虚拟机---> 管理---> 克隆:

 

 克隆的前提要保证磁盘的空间够用,等待克隆完成即可。

 修改新克隆出来的mac地址:

 

 重新生成mac:

 重复上述步骤1)一共生成3个节点即可, 同样需要修改mac地址:

 2)  实现3个节点通信

如果复制后的节点的IP地址是一样的,那么需要修改其他2个节点的IP地址,实现3个节点通信,那么只要这3个节点在同一个子网下即可,  我克隆出来的2个节点node2和node3的ip正好和node1在同一个局域网下,那么就不需要修改了。

ip地址配置
k8s-node1192.168.31.1302核4处理器,8G运行内存,40G硬盘
k8s-node2192.168.31.1312核4处理器,8G运行内存,40G硬盘
k8s-node3192.168.31.1322核4处理器,8G运行内存,40G硬盘

修改node2,node3的配置文件ifcfg-ens33, 具体所在路径为: /etc/sysconfig/network-scripts/ifcfg-ens33:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
IPADDR=192.168.31.130
NETMASK=255.255.255.0
DNS1=8.8.8.8
NM_CONTROLLED=no
GATEWAY=192.168.31.1
UUID="379d7ecb-87f9-4629-8ec1-1e7ef7632261"
DEVICE="ens33"
ONBOOT="yes"
ZONE=public

 修改完毕后,重启network, service network restart , 然后测试节点之间是否可以通信。

 
节点之间可以通信了,我们接着安装kubernetes需要的docker环境。

 四、安装docker

执行命令:

yum -y install docker-ce-18.06.3.ce-3.el7

等待安装完, 创建/etc/docker/daemon.json文件,配置镜像加速服务,我用的是七牛,也可以用阿里云等镜像加速服务。

[root@MiWiFi-R4A-srv etc]# cd /etc/docker/
[root@MiWiFi-R4A-srv docker]# ls
[root@MiWiFi-R4A-srv docker]# vim daemon.json
[root@MiWiFi-R4A-srv docker]# cat daemon.json 
"registry-mirrors":["https://reg-mirror.qiniu.com/"] 

[root@MiWiFi-R4A-srv docker]# sudo systemctl daemon-reload
[root@MiWiFi-R4A-srv docker]# sudo systemctl daemon restart
Unknown operation 'daemon'.
[root@MiWiFi-R4A-srv docker]# sudo systemctl docker restart
Unknown operation 'docker'.
[root@MiWiFi-R4A-srv docker]# sudo systemctl restart docker
[root@MiWiFi-R4A-srv docker]# docker ps
CONTAINER ID   IMAGE     COMMAND   CRE 

更新完damon.json后,注意需要重新reload配置才能失效:

systemctl daemon-reload

        如果能用docker ps命令说明docker启动成功了,如果不行那么检查配置并修改正确,再重启docker服务即可。 

五、安装kubernetes环境

        接下来我们要将三台机器搭建成一个集群。

1)  更改机器的hostname

         一切比较顺利的走到了这里,为了后续搭建集群,我们可以先把host名字改一下,三台服务器的配置,可以设置成1主2从,node0设置为master,分别修改三台机器的host,设置hostname的命令如下,<hostname>为参数

sudo hostnamectl set-hostname <hostname>

设置node0的hostname为k8s-node1, 后续把node1作为k8s集群的主节点。

同样的方式设置node2和node3。

2)  给每台机器配置主机解析

然后将三台机器的ip地址和hostname设置到/etc/hosts文件里,我们可以之间在每台机器的终端执行如下命令: 

cat >> /etc/hosts << EOF
192.168.31.130 k8s-node1
192.168.31.131 k8s-node2
192.168.31.132 k8s-node3
EOF


3)  同步三台机器的时间

分别在三台机器上执行如下命令同步时间: 

yum install ntpdate -y

ntpdate time.windows.com

时间更新一致后,我们需要关闭selinux和swap。

4) 关闭swap

kubernetes安装前一定要关闭swap,否则在安装的时候会报错, 在每台机器上执行如下命令:

sudo swappof -a

但这样的方式是临时关闭的,重启会失效,如果想永久关闭,那么在每台机器上执行如下命令:

vi /etc/fstab

将最后一行关于swap分区的行注释掉。

5) 关闭selinux

centos是默认开启selinux, 如果不关闭会出现很多端口默认不开放的问题,因此我们要把/etc/selinux/config文件里的SELINUX值设置为disabled。

#vi /etc/selinux/config

将配置文件里的SELINUX=enforcing改为SELINUX=disabled 

 重启后配置生效。

6) 配置网络

Ⅰ. 将每个节点上的流量链接到iptables

在每台机器上执行如下命令:

  • 创建 /etc/sysctl.d/k8s.conf文件,输入配置

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

  • 加载br_netfilter模块, br_netfilter模块是linux的一个网络防火墙一般用在网桥上,能够提供网络传输的安全性。

modprobe br_netfilter

配置完成后,使用如下命令生效:

sysctl --system

执行过程如下:

[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> vm.swappiness = 0
> EOF

[root@k8s-master ~]# cat /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# lsmod | grep br_netfilter
br_netfilter           22256  0 
bridge                146976  1 br_netfilter
[root@k8s-master ~]# 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
net.ipv4.ip_forward = 1
vm.swappiness = 0
* Applying /etc/sysctl.conf ...
[root@k8s-master ~]# 

Ⅱ. 开启ipvs

        kubernetes提供2种网络模型,一种是基于iptables,一种基于ipvs, 由于ipvs的性能要比iptables要好,那么我们在每个节点上安装ipset和ipvsadm, 每个节点逐行执行命令:

yum install ipset

yum install ipvsadm

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

我们接着给每台机器安装kubernetes环境,为后续构建集群环境打基础。

六、构建kubernetes集群

安装kubeadm、kubelet、kubectl工具, 选择版本1.18.0

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

 配置docker的driver为systemed,然后使kubelet生效, 开机自启:

systemctl enable kubelet

使用kubeadm初始化k8s节点

1) 接着检查kubelet的版本, 因为我们使用kubeadm初始化kubernetes时会需要指定kubernetes的version, 直接输入Kubelet就能查看版本。

 kubelet版本为: v1.18.6

2) 确保kubelet 的服务是开启状态的。首先可以用  systemctl status kubelet命令查看kubelet是否为running状态 。

systemctl status kubelet

接着Docker ps命令查看kubelet相关的容器是否启动成功: 

或者使用kubelet命令查看是否启动成功,如果报错: "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \\"cgroupfs\\" is different from docker cgroup driver: \\"systemd\\""

最新版的docker的daemon.json中的cgroup driver修改为cgroupfs即可。

3)  指定的api-server-adverties-address一定要为本机的ip地址, 镜像仓库使用阿里云

  --image-repository registry.aliyuncs.com/google_containers \\

4)   --kubernetes-version v1.18.6 的版本一定要与kubelet查看的版本一致!

k8s-node1:

kubeadm init \\
  --apiserver-advertise-address=192.168.31.130 \\
  --image-repository registry.aliyuncs.com/google_containers \\
  --kubernetes-version v1.18.6 \\
  --service-cidr=10.96.0.0/12 \\
  --pod-network-cidr=10.244.0.0/16

如果看到successfully! 的字样,那么说明初始化成功!

然后终端打印出的信息给了提示,如果你要启用的集群,那么执行如下命令来初始化 K8s相关配置

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

接下来就能让其他机器的节点follow master节点, 这里选择让node1作为master节点,那么直接在node2节点的命令行里执行 join操作。

如上图显示已经node2 join node1 成功, 在node1的命令行里查看node:

kubectl get nodes

但是在node2里给了一个警告:

    [WARNING Hostname]: hostname "k8s-node2" could not be reached
    [WARNING Hostname]: hostname "k8s-node2": lookup k8s-node2 on 8.8.8.8:53: no such host

暂时可以不用管,应该是DNS的配置问题,没有解析到主机。

同样的在node3节点执行:

 2个节点join成功后,在node1查看

 至此,k8s集群搭建成功!

踩坑指南

1)  如果执行失败,那么需要删除 /etc目录下的 kubernetes/目录和  /var/lib目录下的etcd/目录下的所有文件,删除完毕后,再重新执行即可。

注意,如果重新初始化kubeadmin,那么需要把 .kube目录删除后再初始化,然后再重新创建.kube目录,否则会出现报错,已踩坑~!

如果执行过程中出现问题    - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

另外自备一份重置k8s的shell脚本,即使在搭建过程中出错,它能帮你重新搭建kubernetes集群。

vim clean-k8s.sh
rm -rf /etc/kubernetes
rm -rf /var/lib/etcd
kubeadm  reset
rm -rf .kube/
echo "clean up !"

授权:

chmod +x clean-k8s.sh

2)  我建议在node1上装好所有需要环境后,再用虚拟机按照node1克隆出一份完整的机器当node2和node3,这样能少配置和安装很多东西。

参考:k8s集群环境的搭建 · 语雀

以上是关于从零开始搭建kubernetes(二)_Kuboard可视化插件搭建的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes部署_02_从零开始搭建k8s集群v1.21.0(亲测可用)

Kubernetes部署_02_从零开始搭建k8s集群v1.21.0(亲测可用)

云原生 | 从零开始学Kubernetes二使用kubeadm搭建K8S集群

Kubernetes第二篇:从零开始搭建k8s集群(亲测可用)

Kubernetes第二篇:从零开始搭建k8s集群(亲测可用)

从零开始搭建kubernetes集群环境(虚拟机/kubeadm方式)