如何在CentOS 8上安装MicroK8s Kubernetes集群
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。