尝试使用Kubernetes
首先
安装
只需在已经安装了Docker Desktop的环境中启用它,就可以使用Docker Desktop支持的Kubernetes。
Kubernetes的基础知识
我会尝试使用清单文件创建实例。
1. 创建清单文件
使用yaml格式创建定义文件来管理容器所使用的资源。
必填项包括apiVersion、kind、metadata和spec。
有关kind资源类型,请参考以下内容。
apiVersion: v1
kind: Pod
metadata:
# Podの名前
name: nginx
spec:
# 実行するコンテナの定義
containers:
- name: nginx
image: nginx:1.15.7
ports:
- containerPort: 80
种类:部署是用于管理多个Pod的资源。
# APIバージョン
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
# 実行するPodの数
replicas: 3
# Pod定義のテンプレード
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.7
ports:
- containerPort: 80
2. 注册清单文件
将创建的Manifest文件注册到Kubernetes中。
在这里,我们将Manifest文件创建为deployment.yaml。
$ kubectl apply -f deployment.yaml
deployment.apps/nginx-deployment created
我会尝试确认Pod的启动情况。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-7d4d8467d9-kr6m9 1/1 Running 0 117s
nginx-deployment-7d4d8467d9-mwhdf 1/1 Running 0 117s
nginx-deployment-7d4d8467d9-srb8g 1/1 Running 0 117s
3. Pod 的负载均衡
首先,我们定义一个Service作为资源来实现对刚刚启动的3个Pod的负载均衡。现在我们要创建一个service.yaml文件。
# APIバージョン
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
# 外部からもアクセス可能にする
type: LoadBalancer
selector:
# 先ほど作成したdeploymentのpod(app: nginx)にトラフィックを分散する
app: nginx
# Port8080への通信をPodの80ポートに転送する
ports:
- protocol: TCP
port: 8080
targetPort: 80
将其注册到Kubernetes中。
$ kubectl apply -f service.yaml
service/nginx-service created
检查服务的状态
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 56m
nginx-service LoadBalancer 10.98.68.206 localhost 8080:32539/TCP 61s
服务为了实现负载均衡,创建虚拟IP地址(Cluster IP)。
EXTERNAL-IP是可从外部访问的虚拟IP地址。
在使用Docker安装的Kubernetes中,EXTERNAL-IP始终为localhost。
显示了 Nginx 的界面。
管理kubenetes对象的方法
有以下三种选择。
-
- 命令型コマンド
-
- 命令型オブジェクト設定
- 宣言型オブジェクト設定
命令型是一种语法形式,
用管理工具将以下步骤实际写入脚本和配置文件中并执行:①在数据库中安装MySQL 5.7.21;②在 Web 上安装 Nginx 版本 1.14.2。
宣言型是指的是
我们定义了一个理想的系统,其中MySQL5.7.21被安装在数据库中,nginx1.14.2被安装在WEB上。
命令式指令
启动一个单一实例的nginx容器。
$ kubectl run nginx --image nginx
用不同的结构做相同的事情。
$ kubectl create deployment nginx --image nginx
更新nginx容器的版本
$ kubectl create deployment nginx --image nginx:1.14.2
$ kubectl set image deployment/nginx nginx=nginx:1.15.8
将nginx容器的副本更改为3个。
$ kubectl create deployment nginx --image nginx
$ kubectl scale deployment/nginx --replicas 3
删除对象
$ kubectl delete deployment nginx
指令式对象设置
创建在配置文件中定义的对象
$ kubectl create -f nginx.v1.14.2.yaml
用在设定文件中定义的信息,覆盖并更新当前设置。
$ kubectl replace -f nginx.v1.15.8.yaml
删除在设定文件中定义的对象。
$ kubectl delete -f nginx.yaml -f redis.yaml
命令式问题
$ kubectl create -f nginx.v1.14.2.yaml
$ kubectl scale deployment/nginx --replicas 3
$ kubectl replace -f nginx.v1.15.8.yaml //2つ目のコマンドの変更が消失
为了防止这类问题的发生,需要实施第三方不进行更改的操作。
声明式对象设置
宣言型使用apply操作。
此外,可以指定目录。
// 更新前にdiffで確認
$ kubectl diff -R -f configs/
$ kubectl apply -R -f configs/
声明型的差异计算
これは、実際のオブジェクトへ行われた変更を保持できることを意味します。
以下は、実際のオブジェクトにreplicas:3
とimage:nginx:1.16
の変更が加えられていた場合です。
マニフェストファイル前回適用した
マニフェストファイル 実際のオブジェクト apply後オブジェクトkind:Deployment
spec:
containers:
– name:nginx
image:nginx:1.15kind:Deployment
spec:
containers:
– name:nginx
image:nginx:1.14kind:Deployment
spec:
replicas:3
containers:
– name:nginx
image:nginx:1.16kind:Deployment
spec:
replicas:3
containers:
– name:nginx
image:nginx:1.15
剩下的3个复制品字段不在适用的清单文件中存在,但由于上次适用的清单文件中也不存在,它们将保留并不会被删除。
image:nginx:1.16将以本次适用的清单文件内容来更新。