使用Docker for Mac,稍微试试Kubernetes
我临时写一下。
参考文献
现在开始吧!Kubernetes入门文章列表
几个小时完全理解!相当庞大的Kubernetes亲自实践!!
Kubernetes训练营2018圣诞日历
最初的设置
启用Kubernetes

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

到目前为止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栏粘贴并登录


尝试搭建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。

删除
$kubectl delete -f k8s/deployment.yaml
$kubectl delete -f k8s/service.yaml
当文件数量增加时,应用程序的删除等操作会变得很麻烦,因此最好将其写在Makefile等文件中。