如何在CentOS 8上安装MicroK8s Kubernetes集群

时间:2020-02-23 14:31:44  来源:igfitidea点击:

MicroK8s是经过CNCF认证的上游Kubernetes部署,可完全在工作站或者边缘设备上运行。作为一个快照,它可以在本地打包所有Kubernetes服务(即没有虚拟机),同时打包所需的整套库和二进制文件。安装受到下载速度的限制,下载速度可达到数百兆字节,而MicroK8的删除丝毫不影响任何来源。

CNCF运行Kubernetes认证一致性计划以确保一致性,从而确保从一个Kubernetes安装到下一个Kubernetes安装之间的流畅互操作性。软件一致性确保Kubernetes的每个供应商版本都支持必需的API,开源社区版本也是如此。来源:CNCF。

在本教程中,我们将一起完成以下工作:

使用MicroK8s安装Kubernetes集群启用dns和仪表板等核心Kubernetes添加组件部署pod并添加新节点配置存储启用日志记录,prometheus和Grafana监视配置注册表

我们需要的只是一个支持Snap的Linux发行版,在本教程中,我们将继续使用CentOS8. 让我们开始吧。

更新服务器并安装快照

为了在一个干净且就绪的平台上启动,我们将更新服务器以获取最新的补丁程序和软件,添加Epel存储库,然后从Epel安装我们的快照软件包。运行以下命令以完成此任务。

sudo dnf install epel-release -y
sudo dnf update
sudo dnf -y install snapd

禁用SELinux

如果我们使SELinux处于强制模式,请将其关闭或者使用许可模式。

sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

软件包安装完成后,需要按以下方式启用用于管理主快速通信插座的systemd单元:

sudo systemctl enable --now snapd.socket

此外,要启用经典快照支持,请输入以下内容在/var/lib/snapd/snap和/snap之间创建符号链接,然后将Snap添加到PATH变量中

sudo ln -s /var/lib/snapd/snap /snap
echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/mysnap.sh

之后,注销并重新登录,或者重新启动系统以确保正确更新快照路径。现在将安装快照。为了测试它,我们可以搜索一个包,看看它是否按预期工作:

$snap find microk8s

Name      Version  Publisher   Notes    Summary
microk8s  v1.19.0  canonical✓  classic  Lightweight Kubernetes for workstations and appliances

在CentOS 8上安装MicroK8

现在我们的服务器已经更新,并且已经安装了Snap,我们准备舒适地获取MicroK8,并开始使用它以容器的方式测试和运行我们的应用程序。要安装MicroK8,请运行以下简单的snap命令,我们将被设置。这就是Snappy的美丽。

$sudo snap install microk8s --classic
microk8s v1.19.0 from Canonical✓ installed

如果不添加经典开关,则会出现错误。因此,请添加它。

为了能够以sudo用户身份运行microk8s命令,我们必须将该用户添加到microk8s组中,然后注销并重新登录。如下所示添加用户:

sudo usermod -aG microk8s $USER
sudo chown -f -R $USER ~/.kube

Onc权限已实现,请注销并重新登录。

之后,我们可以查看已安装的快照

$snap list

Name      Version      Rev   Tracking       Publisher   Notes  
core      16-2.45.3.1  9804  latest/stable  canonical✓  core   
microk8s  v1.19.0      1668  latest/stable  canonical✓  classic

为了以后添加新节点,我们将需要在服务器上打开端口。如果我们在服务器中运行防火墙,则适用。如下添加端口:

sudo firewall-cmd  --permanent --add-port={10255,12379,25000,16443,10250,10257,10259,32000}/tcp
sudo firewall-cmd --reload

在CentOS 8上管理MicroK8

MicroK8s现在已安装在我们的服务器上,我们可以开始滚动了。要管理MicroK8(即启动,状态,停止,启用,禁用,列出节点等),只需执行以下操作:

#####Check Status#####

$microk8s status

microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none

#####Stop MicroK8s#####

$microk8s stop

stop of [microk8s.daemon-apiserver microk8s.daemon-apiserver-kicker microk8s.daemon-cluster-agent microk8s.daemon-containerd microk8s.daemon-contr…Stopped

#####Start MicroK8s#####

$microk8s start

Started.

#####List MicroK8s Nodes#####

$microk8s kubectl get nodes

NAME     STATUS   ROLES    AGE    VERSION
master   Ready    <none>   2m6s   v1.19.0-34+1a52fbf0753680

#####Disable MicroK8s#####

$sudo snap disable microk8s

#####Enable MicroK8s#####

$sudo snap enable microk8s

很棒的东西!我们的MicroK8s已安装,并且可以对我们的命令进行响应,而不会产生任何投诉。让我们进入下一步。

部署Pod并启用仪表板

其中我们将继续部署Pod,并使仪表板能够以良好的视觉效果简化我们的工作。让我们如下部署一个示例redis pod:

$microk8s kubectl create deployment my-redis --image=redis
deployment.apps/my-redis created

列出已部署的Pod

$microk8s kubectl get pods --all-namespaces

NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE  
kube-system   calico-kube-controllers-847c8c99d-f7zd2   1/1     Running   2          3h48m
kube-system   calico-node-xxhwx                         1/1     Running   2          3h48m
default       my-redis-56dcdd56-tlfpf                   1/1     Running   0          70s

而我们最近的Redis Pod正在兴起!

如果我们希望登录到redis实例,请按照以下说明进行操作:

$microk8s kubectl exec -it my-redis-56dcdd56-tlfpf -- bash
theitroad@localhost:/data#

要检查Pod的日志,请确保包括其各自的名称空间,因为如果未提供,它将仅检查默认名称空间。

$microk8s kubectl logs my-redis-56dcdd56-tlfpf -n default

1:C 14 Sep 2017 12:59:32.350 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 14 Sep 2017 12:59:32.350 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 14 Sep 2017 12:59:32.350 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 14 Sep 2017 12:59:32.352 * Running mode=standalone, port=6379.
1:M 14 Sep 2017 12:59:32.352 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower 
value of 128.
1:M 14 Sep 2017 12:59:32.352 # Server initialized
1:M 14 Sep 2017 12:59:32.352 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').
1:M 14 Sep 2017 12:59:32.352 * Ready to accept connections

接下来,让我们启用仪表板和dns来欣赏我们的工作负载。如下启用

$microk8s enable dns dashboard

Enabling Kubernetes Dashboard
Enabling Metrics-Server
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created

我们将需要一个令牌来登录仪表板。要获取令牌,请发出以下两个命令。

$token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
$microk8s kubectl -n kube-system describe secret $token

Name:         default-token-gnj26
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 40394cbe-7761-4de9-b49c-6d8df82aea32

Type:  kubernetes.io/service-account-token

Data

ca.crt:     1103 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InBOVTc3NVd5ZDJHT1FYRmhWZFJ5ZlBVbVpMRWN5M1BEVDdwbE9zNU5XTDgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLWduajI2Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI0MDM5NGNiZS03NzYxLTRkZTktYjQ5Yy02ZDhkZjgyYWVhMzIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.vHqwKlMGX650dTuChwYWsPYZFH7zRhRjuh-BEPtgYYPfrayKU08DSC5v3CixkrZH-wXZydOPit50H5SfCZPwY1TqDNCFgbz--0GnB7GhgwSoK4laXpr42Al7EBgbMWfUEAtnWXVkObUYzF31Sfhac2AnPIBp2kFlqJt8M03uoperJuFLl5x-fDacGrcXTQqvY2m5K1oE4zE38vtaJXdzgNfBMbtUrMneihoFczzOzwPLxzJJ4eZ7vAz1svG6JHO5PDDYbV0gded0egoLQkhu4Saavf8ILUjupJdYywA2VCqB6ERrrElMBHs5tYfckfyi4f6eR59_EZkf7-neCDWTAg

复制令牌并将其保存在安全的地方。

接下来,我们需要连接到仪表板服务。虽然MicroK8s快照将在本地网络上具有一个IP地址(kubernetes-dashboard服务的群集IP),但我们也可以通过将其端口转发到主机上的一个空闲端口来访问该仪表板:

microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard --address 0.0.0.0 30560:443

请注意,我们添加了地址0.0.0.0,以便可以从任何IP而不是服务器上的本地(127.0.0.1)访问该地址。现在,我们将能够通过端口30560访问仪表板。确保在防火墙中启用了此端口,以防我们在环境中进行设置。

sudo firewall-cmd --permanent --add-port=30560/tcp
sudo firewall-cmd --reload

现在打开浏览器,并将其指向服务器的ip或者FQDN。那是https://[ip或者FQDN]:30560。并应显示以下登录页面。我们会注意到它需要令牌或者Kubeconfig文件。我们已经如上所述生成了一个令牌(获取令牌)。只需将其复制并粘贴到登录页面上即可。

将节点添加到集群

到目前为止,我们一直在开发单个节点(服务器),如果我们希望在两个或者更多节点(服务器)上扩展和分发应用程序,那么我们将可以正常使用。要将另一个节点添加到群集中,只需在其上安装Snap和MicroK8S,因为和已介绍了该节点。请在新的CentOS 8服务器上执行和,然后继续以下操作。

如果Firewalld正在运行,请允许端口

node-01 ~ $export OPENSSL_CONF=/var/lib/snapd/snap/microk8s/current/etc/ssl/openssl.cnf
node-01 ~ $sudo firewall-cmd --add-port={25000,10250,10255}/tcp --permanent
node-01 ~ $sudo firewall-cmd --reload

在主节点(我们首先安装的节点)上,执行以下命令以获取我们的令牌并加入命令

$microk8s add-node

From the node you wish to join to this cluster, run the following:
microk8s join 172.26.24.237:25000/dbb2fa9e23dfbdda83c8cb2ae53eaa53

从上面可以看到,我们现在有命令可以在工作节点上运行以加入集群。毫不犹豫地复制命令,登录到工作节点并执行,如下所示:

在新节点上,执行以下命令

node-01 ~ $microk8s join 172.26.24.237:25000/dbb2fa9e23dfbdda83c8cb2ae53eaa53

Contacting cluster at 172.26.16.92
Waiting for this node to finish joining the cluster. ..

配置存储

MicroK8带有内置存储,只需要启用它即可。要启用存储,请将/lib86目录添加到LD_LIBRARY_PATH环境变量的路径,然后在主节点上启用存储,如下所示:

$export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/lib64"
$microk8s enable storage

deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon

要检查是否已启用存储,我们应该检查我们的Pod,并确保已启动hostpath-provisioner pod。

$microk8s kubectl get pods --all-namespaces

NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE
kube-system   kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running   2          22h
kube-system   dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running   2          22h
kube-system   metrics-server-8bbfb4bdb-mgddj               1/1     Running   2          22h
kube-system   coredns-86f78bb79c-58sbs                     1/1     Running   2          22h
kube-system   calico-kube-controllers-847c8c99d-j84p5      1/1     Running   2          22h
kube-system   calico-node-zv994                            1/1     Running   2          21h
kube-system   hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running   0          71s <==

通过运行以下命令确认创建的StorageClass:

$microk8s kubectl get storageclasses

NAME                          PROVISIONER            RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
microk8s-hostpath (default)   microk8s.io/hostpath   Delete          Immediate           false                  8m42s

如我们所见,有一个命名为microk8s-hostpath的存储类。这很重要,因为在创建PersistentVolumeClaims时将使用此名称,如下所示。

创建PersistentVolumeClaim

要创建我们的示例PersistentVolumeClaim,只需打开我们喜欢的编辑器并添加以下yaml行。注意storageClassName上的microk8s-hostpath。

$nano sample-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: elk-data-1
spec:
  storageClassName: microk8s-hostpath
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

然后通过运行create命令来创建PVC,如下所示。我们应该看到创建的消息已打印出来。

$microk8s kubectl create -f sample-pvc.yaml

persistentvolumeclaim/elk-data-1 created

要确认我们的PVC已创建,只需发出如下神奇的MicroK8S命令。是的,PVC是真正创建的。

$microk8s kubectl get pvc

NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
elk-data-1   Bound    pvc-fe391d65-6909-4c76-a6c9-87b3fd5a58a1   2Gi        RWO            microk8s-hostpath   5s

由于MicroK8S是动态交付持久卷的,因此我们的PVC将创建一个持久卷,如下面的命令所确认。

$microk8s kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS       REASON   AGE
pvc-fe391d65-6909-4c76-a6c9-87b3fd5a58a1   2Gi        RWO            Delete           Bound    default/elk-data-1   microk8s-hostpath            5m 39s

配置注册表

注册表基本上是一个存储和内容交付系统,其中保存有命名的Docker镜像,这些镜像可以按照开发进度和发布的不同标记版本使用。 MicroK8S具有内置的注册表,也只需启用并使用它。启用注册表非常简单,就像到目前为止在其他服务中看到的那样。唯一要考虑的是,如果未指定,它将选择20G作为注册表的默认大小。如果我们希望指定尺寸,则只需添加尺寸配置,如下所示。如果我们对20G满意,则忽略size选项。

$microk8s enable registry:size=25Gi

The registry is enabled
The size of the persistent volume is 25Gi

确认是否已部署注册表窗格

$microk8s kubectl get pods --all-namespaces

NAMESPACE            NAME                                         READY   STATUS    RESTARTS   AGE  
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running   2          22h  
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running   2          22h  
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running   2          22h  
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running   2          22h  
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running   2          22h  
kube-system          calico-node-zv994                            1/1     Running   2          22h  
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running   0          52m  
container-registry   registry-9b57d9df8-6djrn                     1/1     Running   0          3m34s <==

为了测试新创建的注册表的性能,我们将安装Podman,提取镜像并将其推送到本地注册表。所有命令如下所示:

$sudo dnf -y install podman
$podman pull redis

确认图像已被拉出

$podman images

REPOSITORY                TAG      IMAGE ID       CREATED      SIZE         9ueue state U
docker.io/library/redis   latest   84c5f6e03bf0   5 days ago   108 MB

如我们所见,我们的镜像来自docker.io存储库。

接下来,编辑Podman配置文件,并在[registries.insecure]下包含本地注册表,因为我们将不会使用任何证书。确保添加服务器的IP或者主机名,以便群集中的其他节点可以访问它。注册表侦听端口32000,我们已经在中的防火墙中打开了该注册表。

$sudo vim /etc/containers/registries.conf
[registries.insecure]
registries = ['172.26.16.92', '127.0.0.1']

从上面的Podman images命令可以看到,我们的镜像来自docker.io存储库,如上所述。让我们对其进行标记并对其进行自定义,以使其匹配并存储到我们的本地注册表中。

$podman tag 84c5f6e03bf0 172.26.16.92:32000/custom-redis:geeksregistry
$podman push 172.26.16.92:32000/custom-redis:geeksregistry

Getting image source signatures
Copying blob ea96cbf71ac4 done
Copying blob 2e9c060aef92 done
Copying blob 7fb1fa4d4022 done
Copying blob 07cab4339852 done
Copying blob 47d8fadc6714 done
Copying blob 45b5e221b672 done
Copying config 84c5f6e03b done
Writing manifest to image destination
Storing signatures

再次运行podman images命令以确认更改。

$podman images

REPOSITORY                        TAG             IMAGE ID       CREATED      SIZE  
172.26.16.92:32000/custom-redis   geeksregistry   84c5f6e03bf0   5 days ago   108 MB
docker.io/library/redis           latest          84c5f6e03bf0   5 days ago   108 MB

登录到Worker节点并提取图像

现在,我们准备从刚刚启用的本地注册表中提取镜像。登录到工作程序节点或者安装了podman的任何节点,然后尝试从主服务器提取镜像。如果我们没有安装podman,只需发出以下命令。

node-01 ~ $sudo dnf install -y podman

再次在工作节点或者任何服务器上,我们希望提取图像,编辑podman配置文件并在[registries.insecure]下包含本地注册表,因为我们将不使用任何证书。

$sudo vim /etc/containers/registries.conf

[registries.insecure]
registries = ['172.26.16.92', '127.0.0.1']

一切做好之后,现在让我们尝试从MicroK8S注册表中提取图像。

node-01 ~ $podman pull 172.26.16.92:32000/custom-redis:geeksregistry

Trying to pull 172.26.16.92:32000/custom-redis:geeksregistry...
Getting image source signatures
Copying blob 08c34a4060bc done
Copying blob 50fae304733d done
Copying blob 8de9fbb8976d done
Copying blob 72c3268a4367 done
Copying blob edbd7b7fe272 done
Copying blob b6c3777aabad done
Copying config 84c5f6e03b done
Writing manifest to image destination
Storing signatures
84c5f6e03bf04e139705ceb2612ae274aad94f8dcf8cc630fbf6d91975f2e1c9

检查图像细节

$podman images

REPOSITORY                        TAG             IMAGE ID       CREATED      SIZE  
172.26.16.92:32000/custom-redis   geeksregistry   84c5f6e03bf0   5 days ago   108 MB

现在我们有了一个运行良好的注册表!接下来,我们将在MicroK8s集群上配置日志记录和监视。

使用FluentD,Elasticsearch和Kibana启用日志记录

MicroK8s附带一个名为fluentd的软件包,该软件包自动部署FluentD,Elasticsearch和Kibana(EFK)!!这使使用可用的成熟(EFK)工具在群集中启用登录变得非常容易,这使其变得更加可爱。

为了使EFK正常启动而没有错误,我们至少需要8GB的内存和4vCPU。如果内存有限,则可以编辑它的状态集,如启用fluentd后将显示的那样。

启用流利如下:

$microk8s enable fluentd

Enabling Fluentd-Elasticsearch
Labeling nodes
node/master labeled
Addon dns is already enabled.
Adding argument --allow-privileged to nodes.
service/elasticsearch-logging created
serviceaccount/elasticsearch-logging created
clusterrole.rbac.authorization.k8s.io/elasticsearch-logging created
clusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging created
statefulset.apps/elasticsearch-logging created
configmap/fluentd-es-config-v0.2.0 created
serviceaccount/fluentd-es created
clusterrole.rbac.authorization.k8s.io/fluentd-es created
clusterrolebinding.rbac.authorization.k8s.io/fluentd-es created
daemonset.apps/fluentd-es-v3.0.2 created
deployment.apps/kibana-logging created
service/kibana-logging created
Fluentd-Elasticsearch is enabled

如果我们看到elasticsearch-logging-0处于待处理状态,并且其状态未更改并且与kibana-logging一起处于CrashLoopBackOff状态,请登录到仪表板,然后单击elasticsearch-logging-0窗格,以便我们查看其事件。如果我们看到0/1个节点可用:1内存不足。 microk8s错误,然后如下所示继续编辑有状态集。

$microk8s kubectl get pods --all-namespaces

NAMESPACE            NAME                                         READY   STATUS              RESTARTS   AGE
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running             2          24h
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running             2          24h
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running             2          24h
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running             2          24h
kube-system          calico-node-zv994                            1/1     Running             2          24h
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running             0          156m 
container-registry   registry-9b57d9df8-6djrn                     1/1     Running             0          107m 
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running             2          24h  
kube-system          elasticsearch-logging-0                      0/1     Pending             0          4m57s <==
kube-system          kibana-logging-7cf6dc4687-bvk46              0/1     ContainerCreating   0          4m57s
kube-system          fluentd-es-v3.0.2-lj7m8                      0/1     Running             1          4m57s

编辑后,删除elasticsearch-logging-0窗格,以便使用新的配置更改重新创建它。给MicroK8s时间拉动和部署Pod。稍后,所有内容应按以下方式运行。请注意,如果我们有足够的内存和CPU,则极不可能会遇到这些错误,因为默认情况下elasticsearch pod请求的内存为3GB。

microk8s kubectl get pods --all-namespaces
NAMESPACE            NAME                                         READY   STATUS    RESTARTS   AGE
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running   3          40h
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running   3          40h
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running   3          40h
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running   1          18h
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running   3          40h
container-registry   registry-9b57d9df8-6djrn                     1/1     Running   1          18h
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running   3          41h
kube-system          calico-node-zv994                            1/1     Running   3          40h
kube-system          elasticsearch-logging-0                      1/1     Running   0          20m <==
kube-system          fluentd-es-v3.0.2-j4hxt                      1/1     Running   10         25m <==
kube-system          kibana-logging-7cf6dc4687-mpsx2              1/1     Running   10         25m <==

访问Kibana

在pod正常运行之后,我们希望访问Kibana界面来配置索引并开始分析日志。为此,让我们了解kibana,流利的和elasticsearch细节。发出cluster-info命令,如下所示:

$microk8s kubectl cluster-info

Kubernetes master is running at https://127.0.0.1:16443
CoreDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
Elasticsearch is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
Kibana is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kibana-logging/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

虽然MicroK8s快照将在本地网络上有一个IP地址(kibana日志记录服务的群集IP),但是我们也可以通过以下方式将Kibana的端口转发到主机上的一个空闲端口来访问Kibana:

$microk8s kubectl port-forward -n kube-system service/kibana-logging --address 0.0.0.0 8080:5601

我们可以通过发出以下命令在部署EFK的名称空间中检查服务。我们将看到,kibana日志记录服务在内部侦听端口5601,我们已将其转发到服务器上的免费端口。

kubectl get services -n kube-system
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   42h
metrics-server              ClusterIP   10.152.183.8     <none>        443/TCP                  42h
kubernetes-dashboard        ClusterIP   10.152.183.88    <none>        443/TCP                  42h
dashboard-metrics-scraper   ClusterIP   10.152.183.239   <none>        8000/TCP                 42h
elasticsearch-logging       ClusterIP   10.152.183.64    <none>        9200/TCP                 48m
kibana-logging              ClusterIP   10.152.183.44    <none>        5601/TCP                 48m <==

我们的Kibana现在正在侦听端口8080。如果服务器中正在运行该端口,请在防火墙上允许此端口,如下图所示:

sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

成功之后,打开浏览器并通过指向以下URL http://[IP或者FQDN]:8080访问Kibanas界面。我们应该看到如下所示的界面。

点击自己浏览

创建索引模式。由于流畅,Logstash应该默认显示。选择它并创建如下

在时间过滤器上选择@timestamp,然后单击"创建索引模式"

创建索引模式后,单击"发现图标",我们将看到如下所示的匹配项。

步骤9:启用Prometheus

MicroK8带有一个内置的prometheus模块,只需启用它即可。该模块将Prometheus与惊人的Grafana一起打开包装。没有什么比这更好的了!启用它,因为其他人已启用以下功能:

$microk8s enable prometheus

然后检查它们是否正在部署

E                                         READY   STATUS              RESTARTS   AGE
kube-system          metrics-server-8bbfb4bdb-mgddj               1/1     Running             4          42h
kube-system          dashboard-metrics-scraper-6c4568dc68-p7q6t   1/1     Running             4          42h
kube-system          kubernetes-dashboard-7ffd448895-ht2j2        1/1     Running             4          42h
kube-system          hostpath-provisioner-5c65fbdb4f-llsnl        1/1     Running             2          20h
container-registry   registry-9b57d9df8-6djrn                     1/1     Running             2          19h
kube-system          elasticsearch-logging-0                      1/1     Running             0          39m
kube-system          kibana-logging-7cf6dc4687-6b48m              1/1     Running             0          38m
kube-system          calico-node-zv994                            1/1     Running             4          42h
kube-system          calico-kube-controllers-847c8c99d-j84p5      1/1     Running             4          42h
kube-system          fluentd-es-v3.0.2-pkcjh                      1/1     Running             0          38m  
kube-system          coredns-86f78bb79c-58sbs                     1/1     Running             4          42h  
monitoring           kube-state-metrics-66b65b78bc-txzpm          0/3     ContainerCreating   0          2m45s <==
monitoring           node-exporter-dq4hv                          0/2     ContainerCreating   0          2m45s <==
monitoring           prometheus-adapter-557648f58c-bgtkw          0/1     ContainerCreating   0          2m44s <==
monitoring           prometheus-operator-5b7946f4d6-bdgqs         0/2     ContainerCreating   0          2m51s <==
monitoring           grafana-7c9bc466d8-g4vss                     1/1     Running             0          2m45s <==

访问Prometheus Web界面

与访问以前的Web界面的方式类似,我们将内部Pod端口移植到服务器上的空闲端口。正如我们在上一条命令中确认的那样,Prometheus部署在名为监视的名称空间中。我们可以在此命名空间中获取所有服务,如下所示:

$microk8s kubectl get services -n monitoring

kubectl get services -n monitoring
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
prometheus-operator     ClusterIP   None            <none>        8443/TCP                     7m41s
alertmanager-main       ClusterIP   10.152.183.34   <none>        9093/TCP                     7m36s
grafana                 ClusterIP   10.152.183.35   <none>        3000/TCP                     7m35s
kube-state-metrics      ClusterIP   None            <none>        8443/TCP,9443/TCP            7m35s
node-exporter           ClusterIP   None            <none>        9100/TCP                     7m35s
prometheus-adapter      ClusterIP   10.152.183.22   <none>        443/TCP                      7m34s
prometheus-k8s          ClusterIP   10.152.183.27   <none>        9090/TCP                     7m33s
alertmanager-operated   ClusterIP   None            <none>        9093/TCP,9094/TCP,9094/UDP   4m
prometheus-operated     ClusterIP   None            <none>        9090/TCP                     3m59s

让我们移植Prometheus并从浏览器访问它。

$microk8s kubectl port-forward -n monitoring service/prometheus-k8s --address 0.0.0.0 9090:9090
Forwarding from 0.0.0.0:9090 -> 9090

然后将浏览器指向端口9090上服务器的IP地址或者FQDN,即http:[IP或者FQDN]:9090。和往常一样,如果CentOS 8机器上运行有防火墙,请允许它。由于我们还将在端口3000上转发Grafana,因此也要添加此端口。

sudo firewall-cmd --add-port={9090,3000}/tcp --permanent
sudo firewall-cmd --reload

访问Grafana Web界面

以类似的方式,像以前一样,在端口3000上转发Grafana。

$microk8s kubectl port-forward -n monitoring service/grafana --address 0.0.0.0 3000:3000

Forwarding from 0.0.0.0:3000 -> 3000

然后将浏览器指向端口3000上服务器的IP地址或者FQDN,即http:[IP或者FQDN]:3000。如下图所示,我们应该会看到漂亮的Grafana仪表板。默认的用户名和密码为admin和admin。系统将提示我们立即进行更改。输入新密码,然后提交,我们将被允许进入。

输入新的凭证

而且你应该被允许进入

有关MicroK8的其他信息,请访问此官方MicroK8S。