在本地环境下,尝试创建一个能够运行的Kubernetes应用
在本地Kubernetes环境中创建一个可以正常运行的东西
由于我有接触Docker的机会,所以顺便试图理解Kubernetes,我总结了一切都能工作的东西的过程。
-
- ローカルKubernetesの環境構築
-
- Kubernetes用Dashboradのインストール
-
- Kubernetes上でJenkinsの構築
Podの作成
Serviceの作成
环境
-
- OS: Mac OS 10.13.6(High Sierra)
-
- Docker for Mac: stable版 2.0.0.3
-
- docker: 18.09.2
- Kubernetes: v1.10.11
使用Docker for Windows/Mac来构建本地Kubernetes。
参考链接
https://qiita.com/nakayamam/items/a9855444cdc4310e0231
请参阅以下链接
https://qiita.com/nakayamam/items/a9855444cdc4310e0231
从官方网站上下载Docker for Mac。下载需要注册账户。
下载完成后,在应用菜单中选择Kubernetes菜单,只需点击”Enable Kubernetes”即可执行Kubernetes的安装。
kubectl下载
请参考以下官方链接:
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-binary-using-curl
执行以下命令。
- kubectlのバイナリをダウンロード
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
- 実行権限を付与
$ chmod +x ./kubectl
- バイナリをbin以下に移動
$ sudo mv ./kubectl /usr/local/bin/kubectl
使用这个命令你就可以执行kubeclt命令了。
安装仪表板
仪表板是一种可以在Web上操作Kubernetes的管理工具。我认为它使得整个Kubernetes的概念更容易理解,所以建议安装并尝试操作。该工具的源代码已上传到Github,您可以参考README进行部署。
链接:https://github.com/kubernetes/dashboard
- 下記のコマンドをターミナルにて実行
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
- 下記コマンドでダッシュボードの起動
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
我们来进行登录吧。
使用持续令牌进行登录
我先试着创建一个简单的 Bearer Token 并尝试登录。Token 的生成方法在 Kubernetes 的 Github 上有记录,我参考那里成功生成了。
链接:https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token
请问是否只需要一种选项?
创建样例用户的详细步骤请参考上述链接中的”Bearer Token”部分。
- コマンドをターミナルにて実行
https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token
复制在最后部分显示的admin-user-token的token,并在管理工具的登录界面上选择“令牌”单选按钮,并将其粘贴到表单中即可登录。以下是官方提供的示例。
Name: admin-user-token-6gl6l
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=admin-user
kubernetes.io/service-account.uid=b16afba9-dfec-11e7-bbb9-901b0e532516
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTZnbDZsIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiMTZhZmJhOS1kZmVjLTExZTctYmJiOS05MDFiMGU1MzI1MTYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.M70CU3lbu3PP4OjhFms8PVL5pQKj-jj4RNSLA4YmQfTXpPUuxqXjiTf094_Rzr0fgN_IVX6gC4fiNUL5ynx9KU-lkPfk0HnX8scxfJNzypL039mpGt0bbe1IXKSIRaq_9VW59Xz-yBUhycYcKPO9RM2Qa1Ax29nqNVko4vLn1_1wPqJ6XSq3GYI8anTzV8Fku4jasUwjrws6Cn6_sPEGmL54sq5R4Z5afUtv-mItTmqZZdxnkRqcJLlg2Y8WbCPogErbsaCDJoABQ7ppaqHetwfM_0yMun6ABOQbIwwl8pspJhpplKwyo700OSpvTT9zlBsu-b35lzXGBRHzv5g_RA
登录后,会显示以下的屏幕内容。
尝试在Kubernetes上运行一些东西。
我决定搭建Jenkins。我将在本地Kubernetes上执行以下操作。
-
- Podの作成
- Serviceの作成
Kubernetes可以做什么
官方网站链接:https://kubernetes.io/ja/docs/concepts/
官方网站目前只有部分内容已翻译成日文(截至2019年03月25日)。
可能在管理工具上显示的侧边菜单可能对应Kubernetes的功能。我对Kubernetes只有“管理容器的东西”的大致了解,但我决定将它理解为一种工具,可以在容器级别上实现对服务器的各种操作(如冗余、负载均衡、权限管理、备份、运维监控等)。就像处理容器级别的小型AWS一样。以后功能等会不断增加。
《Docker/Kubernetes实践容器开发入门》5.3章节列出了Kubernetes的概念清单,阅读后可以更容易理解Kubernetes的概念。
我们在此引用了以下内容,与原书《5.3 Kubernetes Concepts》相同。
这次我想使用这些(Node)、Pod和Service中的一个,在本地环境中构建Jenkins。
Node是什么?
Kubernetes是已安装的服务器的术语。通过增加节点,可以实现冗余等功能。
节点的高级概念是集群。
这次没有什么特别需要处理的东西。
Pod是什么
这是一个容器(集合)的单位。至少有一个容器。
创建Jenkins的Pod
apiVersion: v1
kind: Pod
metadata:
name: jenkins_pod
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins:latest
ports:
- containerPort: 8080
- ymlからPodを生成
$ kubectl apply -f jenkins-pod.yml
让我们通过管理工具来查看创建的Pod。
只有通过 Pod 的生成状态,才无法访问 Jenkins。即使尝试访问 localhost:8080 也会失败。要连接,需要创建一个 Service。
服务是什么
这是提供给Pod集合的路径资源。以容器之间的L3交换机为想象,可能更容易理解。
创建适用于Jenkins的服务。
apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
selector:
app: jenkins
ports:
- name: http
port: 8080
通过selector,将先前创建的Pod的标签进行描述,从而实现Service与Pod的关联。
在ports中,指定与Pod中描述的端口相同的值。
- serviceを作成
$ kubectl apply -f jenkins-service.yml
jenkins:8080 TCP
jenkins:30143 TCP
结束
我使用Kubernetes可以创建一个可以运行某种东西的单个容器。
我希望能够更深入地研究和构建Rails的环境设置,以及在AWS的EKS等云服务上进行构建。
请提供更多上下文信息。
《Docker/Kubernetes实践容器开发入门》很好地握住了Docker和Kubernetes的整体概念。
只需阅读第1章和第2章,就能获得Docker和Kubernetes的概述,所以我认为看一遍是很好的。
这本书的作者不同,但两本都是由CyberAgent出版的。