【实践操作】尝试使用Docker+Kubernetes进行Helm体验
本文为想要亲自操作并理解Helm作为Kubernetes周边技术之一的读者提供了一篇亲自实践的指南。
要做的事情
-
- DockerでKubernetes構築(kubernetes-dashboardのデプロイ)
- Helmでnginxのデプロイ
这个短语在中文中可以被原生地转述为 “目标对象”。
・想要了解Kubernetes、Helm的概述的人
・不僅僅是概述,還希望實際運行並理解Kubernetes、Helm的人
・對Kubernetes有點理解,但還沒有接觸過Helm的人
前提(版本)
Docker Desktop 2.2.0.3 – Docker桌面版2.2.0.3
Kubernetes 版本为 v1.15.5。
kubectl 命令行工具
$ kubectl version --short --client
Client Version: v1.17.1
舵手
$ helm version
version.BuildInfo{Version:"v3.1.0", GitCommit:"b29d20baf09943e134c2fa5e1e1cab3bf93315fa", GitTreeState:"clean", GoVersion:"go1.13.8"}
进行这个实践时要注意的事项。
在本实践中,我们使用Helm3。如果使用Helm2,请根据本文中所提及的方法和执行步骤的不同进行相应调整,我们建议您尽可能地按照上述版本进行实践。
试着使用Kubernetes
Kubernetes是一个开源平台,可以实现部署、扩展和自动化运维应用程序和容器。
通过使用定义资源的yaml格式文件来构建应用程序和中间件。
此外,还可以根据资源的使用情况稳定地进行扩展。
安装适用于 Mac 的 Docker Desktop。
启用Kubernetes
3. 切換至確認啟動模式
确认是否存在 “docker-desktop”。
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* docker-desktop docker-desktop docker-desktop
接下来,我们将转换到另一个上下文。
$ kubectl config use-context docker-desktop
Switched to context "docker-desktop".
用kubectl命令部署kubernetes-dashboard的操作
让我们使用kubectl命令部署一个名为kubernetes-dashboard的应用程序。
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
5. 检查启动
创建一个代理服务器或应用程序级网关在localhost和Kubernetes API服务器之间,以便访问应用程序。
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
请使用浏览器访问以下URL:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
请注意,只需将端口号“8001”与第五步中的“127.0.0.1:8001”相对应。如果是“127.0.0.1:8002”,请使用“http://localhost:8002/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/”访问。
6. 获取令牌
需要发行访问令牌才能访问仪表板。
请在新窗口中打开终端并执行以下命令来获得访问令牌。
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')
你会看到很多结果,无论在哪里都可以,只需完整复制“token:”后面的值。
7.访问仪表盘
请选择“令牌”,然后粘贴刚才的值,点击“登录”。
试着使用Helm。
Kubernetes的包管理器和应用程序管理工具,可以将多个Kubernetes资源打包为称为Chart的文件,并进行包管理。它可用于以简单的命令多次部署Kubernetes资源,或者使用其他应用程序和服务的特定版本来管理应用程序的依赖关系。
1. 安装Helm
使用Homebrew进行安装。
$ brew install kubernetes-helm
我们来确认一下是否已经安装了。
$ helm version
version.BuildInfo{Version:"v3.1.0", GitCommit:"b29d20baf09943e134c2fa5e1e1cab3bf93315fa", GitTreeState:"clean", GoVersion:"go1.13.8"}
为了保险起见,我将更新helm的仓库。
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈ Happy Helming!⎈
将bitnami添加到Helm客户端环境中。
将Bitnami添加到Helm存储库中。通过将资源添加到Helm存储库,无需使用yaml文件即可多次部署相同的资源。
※Bitnami是什么?
Bitnami是一个解决方案,它将WordPress、Redmine等Web应用程序与PHP、MySQL等中间件一起预配置并打包提供。
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
创建新版本并部署到Kubernetes。
我会在Kubernetes上部署nginx。
$ helm install nginxserver bitnami/nginx
NAME: nginxserver
LAST DEPLOYED: Tue Feb 18 00:10:51 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Get the NGINX URL:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w nginxserver'
export SERVICE_IP=$(kubectl get svc --namespace default nginxserver --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "NGINX URL: http://$SERVICE_IP/"
确认
让我们来确认一下部署的nginx。
$ kubectl get pods -l app.kubernetes.io/name=nginx
NAME READY STATUS RESTARTS AGE
nginxserver-7f8f4c554d-xfmzc 1/1 Running 0 5m26s
$ kubectl get service nginxserver
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginxserver LoadBalancer 10.104.187.33 localhost 80:30421/TCP,443:31118/TCP 5m45s
打扫卫生
让我们删除最后部署的资源。
$ kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
$ kubectl delete svc nginxserver
对于那些希望更加实践地学习Kubernetes周边技术的人来说
建议按照Amazon EKS Workshop上的步骤进行实践。
在上述的亲身实践中,
-
- Kubernetes
-
- Helm
-
- EKS
-
- RBAC
-
- Elasticsearch
- Grafana
若有时间的话,强烈建议学习并掌握Kubernetes的相关技术,这将使你广泛了解到目前所需的技能。请务必尝试一下。
赠品
如果您想进行Helm2实操,请参考以下步骤。请注意,由于这是旧版本,无法保证正常运行。
1. 安装Helm
$ cd ~/downloads
$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
$ chmod +x get_helm.sh
$ ./get_helm.sh
2. 安装 Tiller
使用Helm命令安装Tiller到集群中,这样就可以允许对集群中资源进行管理的访问。
*Tiller是什么?
在使用Helm将资源部署到服务器上时,
并不是直接部署chart,而是通过一个名为Tiller的部署对象来将其放置到目标服务器上。
$ helm init --docker-desktop tiller
3. 将Helm存储库添加到Helm库中。
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
安装nginx。
在这里,与Helm3不同的是需要指定选项”–name”。
$ helm install --name mywebserver bitnami/nginx