尝试使用Kubernetes

首先

undefined

安装

只需在已经安装了Docker Desktop的环境中启用它,就可以使用Docker Desktop支持的Kubernetes。

スクリーンショット 2022-02-19 20.05.45.png

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
スクリーンショット 2022-02-19 20.37.16.png

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。

スクリーンショット 2022-02-19 21.01.24.png

显示了 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:3image: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将以本次适用的清单文件内容来更新。

广告
将在 10 秒后关闭
bannerAds