使用Docker for Mac,稍微试试Kubernetes

我临时写一下。

参考文献

现在开始吧!Kubernetes入门文章列表
几个小时完全理解!相当庞大的Kubernetes亲自实践!!
Kubernetes训练营2018圣诞日历

最初的设置

启用Kubernetes

スクリーンショット 2019-09-19 17.32.18.png

[x] 勾选「启用 Kubernetes」,然后点击应用。

スクリーンショット 2019-09-20 13.41.29.png

到目前为止kubectl命令已生效。

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.6", GitCommit:"96fac5cd13a5dc064f7d9f4f23030a6aeface6cc", GitTreeState:"clean", BuildDate:"2019-08-19T11:13:49Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.6", GitCommit:"96fac5cd13a5dc064f7d9f4f23030a6aeface6cc", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:16Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

设定 contexts 的设置

在我的环境中有两个。

$ kubectl config get-contexts
CURRENT   NAME                 CLUSTER          AUTHINFO         NAMESPACE
*         docker-desktop       docker-desktop   docker-desktop
          docker-for-desktop   docker-desktop   docker-desktop

为了能够管理多个不同的集群和用户,contexts提供了一种机制,可以切换连接目标和使用的用户。
由于CLUSTER和AUTHINFO均指代同一物体,所以我认为这种方式是可行的。
但是,首先我们将其更改为docker-for-desktop,按照各种文章中的内容。

$ kubectl config use-context docker-for-desktop
Switched to context "docker-for-desktop".

确认 (què

$ kubectl config get-contexts
CURRENT   NAME                 CLUSTER          AUTHINFO         NAMESPACE
          docker-desktop       docker-desktop   docker-desktop
*         docker-for-desktop   docker-desktop   docker-desktop

确认情况

只是刚刚启动而已,但在这种状态下,以下的Pod(关于Pod和kubectl的简单用法)正在运行。

$ kubectl get pods --namespace=kube-system
NAME                                     READY   STATUS    RESTARTS   AGE
coredns-584795fc57-cvgn9                 1/1     Running   0          15m
coredns-584795fc57-j6kr5                 1/1     Running   0          15m
etcd-docker-desktop                      1/1     Running   0          14m
kube-apiserver-docker-desktop            1/1     Running   0          14m
kube-controller-manager-docker-desktop   1/1     Running   0          14m
kube-proxy-kxcxn                         1/1     Running   0          15m
kube-scheduler-docker-desktop            1/1     Running   0          14m

Kubernetes的概述已经通过下面链接中的清晰图示进行了解释。

建立工程

引入Dashboard

听说有一个叫作Kubernetes仪表板的工具可用,所以我们先尝试将其引入使用。

由于想在查看Pod内容的同时操作,所以需要先下载一次。

$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
$ kubectl apply -f kubernetes-dashboard.yaml.txt 
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
$ kubectl proxy

可以通过下列长URL进行访问。

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

仪表板验证

寻找令牌

寻找以「default-token-」开头的密钥。

$ kubectl -n kube-system get secret
NAME  
...                                           TYPE                                  DATA   AGE
default-token-r9tz9                              kubernetes.io/service-account-token   3      3h45m
...

请确认「default-token-r9tz9」的详细信息,并复制该Token。

$ kubectl -n kube-system describe secret default-token-r9tz9 
Name:         default-token-r9tz9
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 90968fa6-db60-11e9-a391-025000000001

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.ey...

请将刚才的屏幕上的Token栏粘贴并登录

スクリーンショット 2019-09-20 17.30.07.png
スクリーンショット 2019-09-20 17.30.16.png

尝试搭建Node.js的环境。

创建一个Node.js环境的Docker容器。使用通过nuxt-create等工具创建的源代码。

FROM node:12.10.0-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install
COPY . .

EXPOSE 3000

CMD [ "npm", "start" ]

执行构建

docker build --no-cache -t test-app .

创建部署

kubernetes/部署文件.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: test-app
    spec:
      containers:
      - name: test-app
        image: test-app
        imagePullPolicy: IfNotPresent # localのimageを利用する場合に必要
        command:
        ports:
          - containerPort: 3000

创建服务

k8s/服务.yaml

kind: Service
apiVersion: v1
metadata:
  name: test-app-service
spec:
  type: LoadBalancer
  selector:
    app: test-app
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000

启动-确认-删除

启动

$kubectl apply -f k8s/deployment.yaml
$kubectl apply -f k8s/service.yaml

只要在這個狀態下連接到localhost:3000,你就可以看到畫面。

$ kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
test-app-5df7f6678c-hvzqg   1/1     Running   0          4m18s
test-app-5df7f6678c-rrfc6   1/1     Running   0          4m18s

当检查仪表盘时,与上次不同,能够看到图表和正在运行的pod。

スクリーンショット 2019-10-01 13.14.29.png

删除

$kubectl delete -f k8s/deployment.yaml
$kubectl delete -f k8s/service.yaml

当文件数量增加时,应用程序的删除等操作会变得很麻烦,因此最好将其写在Makefile等文件中。

bannerAds