在本地环境下,尝试创建一个能够运行的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
dashborad.png

我们来进行登录吧。

使用持续令牌进行登录

我先试着创建一个简单的 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

登录后,会显示以下的屏幕内容。

dashboard2.png

尝试在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》相同。

リソース名用途NodeKubernetesクラスタで実行するコンテンを配置するためのサーバNamespaceKubernetesクラスタ内で作る仮想的なクラスタPodコンテナの集合体の単位でコンテンを実行する方法を定義するReplicaSet同じ仕様のPodを複数生成・管理するDeploymentReplicaSetの世代管理をするIngressServiceをKubernetesクラスタの外に公開するConfigMap設定情報を定義しPodに供給するPersistentVolumePodが利用するストレージのサイズや種別を定義するPersistentVolumeClaimPersistentVolumeを動的に確保するStrageClassPersistentVolumeが確保するストレージの種類を定義するStatefulSet同じ仕様で一意性のあるPodを複数生成・管理するJob常駐目的ではない複数のPodを作成し、正常終了することを保証するCronJobcron記法でスケジューリングして実行されるJobSercret認証情報等の機密データを定義するRoleNamespace内で操作可能なKubernetesリソースのルールを定義するRoleBindingRoleとKubernetesリソースを利用するユーザーを紐づけるClusterRoleCluster全体で操作可能なKubernetesリソースを定義づけるServiceAccountPodにKubernetesリソースを操作させる前に利用するユーザー

这次我想使用这些(Node)、Pod和Service中的一个,在本地环境中构建Jenkins。

Node是什么?

Kubernetes是已安装的服务器的术语。通过增加节点,可以实现冗余等功能。
节点的高级概念是集群。

node.png

这次没有什么特别需要处理的东西。

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.png

只有通过 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
service.png
jenkins:8080 TCP
jenkins:30143 TCP
jenkins.png

结束

我使用Kubernetes可以创建一个可以运行某种东西的单个容器。
我希望能够更深入地研究和构建Rails的环境设置,以及在AWS的EKS等云服务上进行构建。

请提供更多上下文信息。

《Docker/Kubernetes实践容器开发入门》很好地握住了Docker和Kubernetes的整体概念。

只需阅读第1章和第2章,就能获得Docker和Kubernetes的概述,所以我认为看一遍是很好的。

这本书的作者不同,但两本都是由CyberAgent出版的。

广告
将在 10 秒后关闭
bannerAds