参考文章:
Basic operations
Accessing Dashboard
【K8S 四】部署 kubernetes-dashboard 插件
原文:
现在您已经安装了 Charmed Kubernetes 集群,您可以用它做什么?此页面详细介绍了一些基本的集群操作,包括如何检查集群的状态并测试它是否与内置的演示部署一起工作。
如果您已经熟悉这一点,您可能仍想查看下一步以获取有关操作 Kubernetes 的更多有用指南。
您将需要 kubectl 才能使用您的 Kubernetes 集群。如果尚未安装,可以通过 snap 包轻松添加:
sudo snap install kubectl --classic
拷贝配置文件到本机:
juju scp kubernetes-master/0:config ~/.kube/config
其他平台及安装方式请查看Kubernetes文档。
用于访问新部署集群的配置文件存储在集群本身中,安装完成后即可使用。您应该使用以下命令来检索它(如果 kubectl 安装后没有创建 .kube 目录,则创建一个 .kube 目录):
注意:如果您有多个集群,则需要管理配置文件,而不仅仅是替换它。有关管理多个集群的更多信息,请参阅 Kubernetes 文档。
您可以验证 kubectl 是否配置正确,并且可以通过运行以下命令查看集群:
kubectl cluster-info
现在您可以在 Kubernetes 集群中运行 pod:
kubectl create -f example.yaml
列出集群中的所有 pod:
kubectl get pods
列出集群中的所有服务:
kubectl get services
访问 Kubernetes 仪表板
要检查是否一切正常,您可能需要登录 Kubernetes 仪表板。
推荐的方法是使用内置代理服务,运行如下:
kubectl proxy
仪表板的 URL 将是
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
对于 1.16 之前的版本,仪表板 URL 将是
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
在仪表板地址处打开浏览器。您将看到一个身份验证屏幕:
您需要使用有效用户登录仪表板。最简单的方法是选择您的 kubeconfig 文件,但为了将来的管理,您应该设置基于角色的访问控制。
kubernetes-worker charm支持部署 NGINX 入口控制器。 Ingress 允许从 Internet 访问在集群内运行 Web 服务的容器。
首先使用以下 juju 命令允许 Internet 访问 kubernetes-worker charm:
juju expose kubernetes-worker
在 Kubernetes 中,工作负载是使用 pod、服务和入口定义来声明的。默认情况下为您提供了一个入口控制器,并部署到集群的默认命名空间中。如果一个不可用,您可以使用以下命令部署它:
juju config kubernetes-worker ingress=true
入口资源是到您的容器的 DNS 映射,通过端点路由。
Charmed Kubernetes 1.14+ 默认启用了 CoreDNS,它允许 Kubernetes 中的 pod 与其他 pod 或服务通过名称进行通信。
如果您想禁用 DNS(例如,部署您自己的自定义 DNS 解决方案),您可以使用:
juju config kubernetes-master dns-provider=none
要部署自定义 DNS 配置,首先禁用charm管理的 DNS 提供程序(见上文)。部署完 DNS pod 后,不要忘记使用 DNS 服务的 IP 配置 kubelet:
juju config kubernetes-worker kubelet-extra-config="{clusterDNS: ['10.152.183.123']}"
作为不熟悉 Kubernetes 的用户的示例,我们打包了一个操作来部署示例和清理自身。
此操作执行以下步骤:
nip.io
域以模拟适当的 DNS 服务。要在 Kubernetes 集群中部署 microbot Web 应用程序的 3 个副本,请运行以下命令:
juju run-action kubernetes-worker/0 microbot replicas=3 --wait
这应该会在几分钟后产生类似于以下内容的输出(您的 FQDN 将有所不同,并且包含云实例的地址。)
id: 4d4a2245-e544-45d1-886d-b828ccf72c47
results:
address: microbot.52.87.186.136.nip.io
status: completed
timing:
completed: 2019-03-22 15:00:39 +0000 UTC
enqueued: 2019-03-22 15:00:34 +0000 UTC
started: 2019-03-22 15:00:37 +0000 UTC
unit: kubernetes-worker/0
此时,您可以检查集群以观察上线的工作负载。
kubectl get pods
NAME READY STATUS RESTARTS AGE
microbot-5b9864df4d-q7b94 1/1 Running 0 2m31s
microbot-5b9864df4d-rx9b2 1/1 Running 0 2m31s
microbot-5b9864df4d-x7ppr 1/1 Running 0 2m31s
kubectl get services,endpoints
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.152.183.1 443/TCP 112m
service/microbot ClusterIP 10.152.183.62 80/TCP 3m50s
NAME ENDPOINTS AGE
endpoints/kubernetes 10.95.195.54:6443 112m
endpoints/microbot 10.1.77.12:80,10.1.77.13:80,10.1.77.14:80 3m50s
kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
microbot-ingress microbot.52.87.186.136.nip.io 80 5m36s
当所有 pod 都列为 Running 时,您就可以访问 ingress 列表的 HOSTS 列中列出的地址了。
注意:在初始应用程序部署过程中看到 502/503 错误是正常的
当您刷新页面时,您将看到一个 microbot 网页,由其中一个 microbot 副本 pod 提供服务。刷新将向您显示另一个具有不同主机名的微型机器人,因为请求在副本之间进行了负载平衡。
还有一个清理microbot应用程序的操作。当您使用完 microbot 应用程序后,您可以通过一个 Juju 操作将它们从 Pod 中删除:
juju run-action kubernetes-worker/0 microbot delete=true
如果您不再需要让您的worker访问 Internet,请记住取消暴露 kubernetes-worker 的charm:
juju unexpose kubernetes-worker
要了解有关 Kubernetes Ingress 以及如何配置超出默认值(例如 TLS 和 websocket 支持)的ngix Ingress Controller 的更多信息,请查看 github 上的 nginx-ingress-controller项目。
现在您的 Charmed Kubernetes 集群已启动并运行,以下是您可能希望尝试的其他一些事项的一些建议:
以下是实际操作:
开始根据Basic operations,使用kubectl proxy模式,访问dashboard 时,出现以下问题:
kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' --port=8888
访问的dashboard url为:(注,在nat里用8888映射内网8888端口)
http://localhost:8888/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
经过查资料,原来kubernetes dashboard访问可以通过下面的方式:
1 kubectl proxy
2 kubectl port-forward
3 NodePort
注: 从 1.7 开始,dashboard 只允许通过 https 访问,如果使用 kube proxy 则必须监听 localhost 或 127.0.0.1。node port 只适用于开发环境而不适用于生产环境。
所以只能改用kubectl port-forward ,命令如下:
kubectl port-forward -n kubernetes-dashboard svc/kubernetes-dashboard 8888:443 --address 0.0.0.0
#将dashboard的服务端口443转发到8888端口,并运行外网访问;
访问的页面为:
https://localhost:8888
注:由于是在maas服务器10.0.0.3上执行的kubectl,且nat服务器上做了公网地址端口8888到私网地址端口8888的映射,所以实际访问的是:
https://nat公网ip:8888
在前文中,我们拷贝过配置文件,token就在这个配置文件中:
juju scp kubernetes-master/0:config ~/.kube/config
cat ~/.kube/config
输出类似:
token: admin::nk39GlZLNJdg123456huAJkg0OI8L6I9
将这个token填入: