当前位置: 代码迷 >> 综合 >> 部署kubernetes(k8s)、dashboard ui及插件metrics server
  详细解决方案

部署kubernetes(k8s)、dashboard ui及插件metrics server

热度:85   发布时间:2023-12-16 19:44:06.0

1 Kubernetes概念

Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。[3]该系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。

它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。[4] 它支持一系列容器工具, 包括Docker等。CNCF于2017年宣布首批Kubernetes认证服务提供商(KCSPs),包含IBM、华为、MIRANTIS等服务商。

2 搭建环境

部署K8S有Kubeadm、Minikube、二进制等多种方式,这里采用Kubeadm工具部署。kubeadm 是 kubernetes 的集群安装工具,能够快速安装 kubernetes 集群。

使用kubeadm安装kubernetes的要求:

1.一台或多台机器运行以下之一:
Ubuntu 16.04+
Debian 9
CentOS 7
RHEL 7
Fedora 25/26(尽力而为)
HypriotOS v1.0.1 +
容器Linux(用1576.4.0测试)
每台机器2 GB或更多的内存(更少的将为您的应用程序留下一点空间)
2.2个CPU或更多
3.集群中所有机器(公用或专用网络都是正常的)
4.每个节点的唯一主机名,MAC地址和product_uuid
5.某些端口在您的机器上打开。请参阅下面的部分了解更多详情
6.交换(swap)禁用。您必须禁用交换为了使kubelet正常工作。

2.1 准备

1.准备3台机器,要求IP能互通,一台充当master节点,另两台用作node节点。

2.ssh服务设置:
首先,确定是否有安装SSH服务:ps -e | grep ssh*
如果没有任何显示,则没有安装该服务,安装SSH-server:apt-get install openssh-server
接着安装SSH-client:apt-get install openssh-client
确认安装SSH服务成功与否:ps -e|grep sshd
如果,看到sshd表明ssh-server启动了;否则 /etc/init.d/ssh start 如下图:

在这里插入图片描述

3.关闭所有节点防火墙,禁用selinux,关闭系统swap
关闭防火墙:ufw disable
Ubuntu默认不安装selinux
关闭swap: swapoff -a

4.安装docker
检查curl包有没有安装:which curl
如果curl没有安装的话,安装curl包: sudo apt-get install curl
获得最新的docker安装包:curl -sSL https://get.docker.com/ | sh
确认Docker是否安装成功:sudo docker run hello-world
这个命令会下载一个测试用的镜像并启动一个容器运行它
在这里插入图片描述

2.2 master节点

参考自:国内源安装kubernetes

2.2.1 更新kubernetes源

1、安装 GPG 证书
官方源:curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
国内源:curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add

2、写入软件源
echo “deb http://apt.kubernetes.io/ kubernetes-xenial main” > /etc/apt/sources.list.d/kubernetes.list
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main " > /etc/apt/sources.list.d/kubernetes.list

3、
apt-get update

2.2.2 安装软件包

在master和node节点上都安装kubelet kubeadm kubectl kubernetes-cni:
apt-get install -y kubelet kubeadm kubectl kubernetes-cni

PS:
kubeadm:用于初始化 Kubernetes 集群
kubectl:Kubernetes 的命令行工具,主要作用是部署和管理应用,查看各种资源,创建,删除和更新组件
kubelet:主要负责启动 Pod 和容器

2.2.3 用kubadm初始化master

设置网络的分配地址段为:10.244.0.0/16

pod-network-cidr是pod的网络ip,不要和当前ip地址用同一个网段,不然会出错

为了让flannel正确工作,–pod-network-cidr=必须作为参数传递给kubeadm init:
kubeadm init --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --pod-network-cidr=10.244.0.0/16
(注意记录下初始化结果中的kubeadm join命令,部署节点时会用到)
在这里插入图片描述
令牌用于主节点和加入节点之间的相互认证。这里包含的令牌是秘密的,保持安全,因为拥有此令牌的任何人都可以将已验证的节点添加到群集中。这些令牌可以用kubeadm token命令列出,创建和删除.

2.2.4 控制集群

这个时候,我们还不能通过kubectl来控制集群,要让kubectl可用,我们需要做:

对于非root用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown (id?u):(id -u):(id?u):(id -g) $HOME/.kube/config

对于root用户
export KUBECONFIG=/etc/kubernetes/admin.conf

2.2.5 配置网络

可以配置多种网络,这里我们选用fannel网络进行配置。
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
(如若失败,多执行几下)
在这里插入图片描述安装完network之后,等待加载一会,你可以通过kubectl get pods --all-namespaces来查看kube-dns是否在running来判断network是否安装成功。
在这里插入图片描述

2.2.6 部署dashboard UI

1、安装dashboard ui:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

或者
先下载yaml文件:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
然后:
kubectl apply -f recommended.yaml

检查是否安装成功(running):
kubectl get pods --all-namespaces
在这里插入图片描述

好像也可以通过kubernetes-dashboard.yaml文件部署dashboard,但会出现“the server could not find the requested resource”的情形。

2、访问dashboard ui

有多种方式,这里介绍两种

(1)NodePort方式

① 修改recommended.yaml,添加type: NodePortnodePort: 30001(nodePort: 30001可以省略,缺省则为随机端口,服务启动后使用kubectl get svc -n kubernetes-dashboard查看)
在这里插入图片描述
② 然后执行:kubectl apply -f recommended.yaml
使用指令kubectl get pods --all-namespaces查看kubernetes dashboard是否处于running状态。

PS:
以上①、②两步也可以用该指令代替:
kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}'
因为使用该指令生成的nodePort是随机的,此时需要通过kubectl get svc -n kubernetes-dashboard查看端口。

以上两步参考自:
Kubernetes Dashboard部署

③ 访问url:
https://<masterIP>:<nodePort>

访问成功界面如下:
在这里插入图片描述
④接下来是认证,这里使用Token方式认证

2.2.6.1 登录token生成方式

生成方式一:

  • 创建serviceaccount:
    kubectl create serviceaccount dashboard-admin -n kube-system
    输出:
    在这里插入图片描述
  • 把serviceaccount绑定在clusteradmin,授权serviceaccount用户具有整个集群的访问管理权限:
    kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
    输出:
    在这里插入图片描述
  • 获取serviceaccount的secret信息,可得到token(令牌)的信息:
    kubectl get secret -n kube-system
    输出:
    在这里插入图片描述
  • dashboard-admin-token-slfcr 是通过上边命令获取到的
    kubectl describe secret dashboard-admin-token-slfcr -n kube-system
    输出:
    在这里插入图片描述
    在认证界面输入token即可登录
    在这里插入图片描述

参考自:「走进k8s」Kubernetes1.15.1安装 Dashboard 的WEB UI插件(15)

生成方式二:
Kubernetes web界面kubernetes-dashboard安装

Creating sample user

(2)Porxy方式

//使用kubectl命令行工具,通过运行以下命令来访问Dashboard:
kubectl proxy

//通过以下链接进入dashboard,但仅限于执行kubectl proxy命令的主机:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

(3)API Server方式

尝试了但没有成功

可参考:kubernetes实战篇之通过api-server访问dashboard

2.2.7 安装metrics server

从 v1.8 开始,资源使用情况的监控(如容器的 CPU 和内存使用)可以通过 Metrics API的形式获取,具体的组件为Metrics Server,用来替换之前的heapster,heapster从1.11开始逐渐被废弃。

参考自:kubernetes之配置Metrics Server

//下载metrics server:
git clone https://github.com/kubernetes-incubator/metrics-server

//修改metrics server/deploy/kubernetes下的metrics-server-deployment.yaml文件,添加
在这里插入图片描述
command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP

//部署:
kubectl apply -f .

//查看运行状态
kubectl get pods -n kube-system | grep metrics
在这里插入图片描述
kubectl get svc -n kube-system | grep metrics
在这里插入图片描述
至此,Kubernetes 集群中的 Metrics Server 就配置完成了。

PS:
如若出现非running状态,排查一下两种情形
1.可能是Master Node不参与工作负载导致的,可通过以下指令允许master节点部署pod:
kubectl taint nodes --all node-role.kubernetes.io/master-

另:禁止master部署pod指令为:
kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule

2.可能是镜像没拉下来,可参考以下链接看能否解决
kubernetes笔记-metrics-server
或者是修改metrics-server-deployment.yaml文件时镜像也一起修改了,参考下方文章
kubernetes 1.14安装部署metrics-server插件

//查看node资源使用情况:
kubectl top nodes
在这里插入图片描述
kubectl top pods

此时再登录dashboard ui,可看到多了CPU和内存使用情况部分
在这里插入图片描述

Node节点

更新kubernetes源

1、
国内源:curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add

2、
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main " > /etc/apt/sources.list.d/kubernetes.list

3、
apt-get update

安装组件

apt-get install -y kubelet kubeadm kubectl kubernetes-cni

加入到集群

在node节点输入master上初始化时生成的kubeam join指令

形如:
kubeadm join 192.168.180.121:6443 --token p08kmc.nci5h0xfmlcw92vg --discovery-token-ca-cert-hash sha256:44315d59e08f4d94bc75d20730b861818dfeda6517c1b228399f061f4256329b

输出:
在这里插入图片描述

PS:
//重新在K8s上获取添加节点指令(token)
kubeadm token create --print-join-command

3 常用指令

//查看集群节点
kubectl get nodes

//查看所有命名空间的pods
kubectl get pods --all-namespaces

//查看kube-system命名空间的pods
kubectl get pods -n kube-system

//查看token
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

或者
//输入下面命令查询kube-system命名空间下的所有secret
kubectl get secret -n kube-system

//然后获取token。只要是type为service-account-token的secret的token都可以使用。
//比如我们获取replicaset-controller-token-wsv4v的token
kubectl -n kube-system describe replicaset-controller-token-wsv4v

//重新在K8s上获取添加节点指令(token)
kubeadm token create --print-join-command

//删除pod
kubectl delete pods kubernetes-dashboard-845747bdd4-9lsx4 --namespace=kube-system

//删除deployment
kubectl delete deployments kubernetes-dashboard -n kube-system

4 坑

4.1 重新安装或出现ContainerCreating,输入以下指令

解决办法:
依次输入如下指令:
kubeadm reset

systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker
systemctl start kubelet

参考链接:https://www.cnblogs.com/wangxu01/articles/11803547.html

4.2 kubernetes启动Pod遇到CrashLoopBackOff的解决思路

参考:kubernetes启动Pod遇到CrashLoopBackOff的解决思路

问题排查步骤

如果出现pod或node节点状态异常等情况,可通过如下两个命令查看信息分析错误原因:
kubectl -n kube-system describe pods <pod name>

kubectl -n kube-system logs -f <pod name>

参考自:kubernetes启动Pod遇到CrashLoopBackOff的解决思路

官方资料:

官网:https://kubernetes.io/

中文社区:https://www.kubernetes.org.cn/

中文文档:http://docs.kubernetes.org.cn/

https://github.com/kubernetes/dashboard

参考

1 天入门 Kubernetes/K8S

kubeadm部署kubernetes v1.16.3集群

kubernetes部署dashboard可视化插件

Kubernetes web界面kubernetes-dashboard安装

kubernetes1.9安装dashboard,以及token认证问题:
https://segmentfault.com/a/1190000013681047

http://docs.kubernetes.org.cn/230.html

  相关解决方案