Kubernetes和EKS学习记录 第一部分

大纲

由于工作需要使用Kubernetes (AWS的EKS) ,我将学习相关知识。

我打算将学习步骤安排如下。

    1. 理解Kubernetes的基本术语

 

    1. 尝试完成Kubernetes官方教程

 

    1. 理解EKS的基本术语

 

    尝试在EKS上创建服务

本次是第一步「理解Kubernetes的基本术语」。

这篇文章是有关这些笔记和总结的。
已经设置了几个项目。
由于是边试错边进行的,所以作为步骤可能不需要。只是用来做备忘录。

基本的词汇

Node(ノード)
仮想マシンだったり実物のサーバだったり、実際のサーバー部分に当たります。Node = 1台のサーバーの認識。
Podを稼働させているワーカーノードと、それを管理するためのマスターノードの2種類があります。

Pod
Podは常にノード上で動作します。Podの中にコンテナがあり、Podでは最低一つ以上のコンテナが稼働します。
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/explore/explore-intro/

集群和控制平面、数据平面

首先,我们需要了解最大的框架。

Kubernetes 集群由控制平面(Master 节点)和数据平面(运行容器的 Worker 节点)组成。

    コントロールプレーン

控制平面包括保持集群信息的etcd,控制Pod在哪个节点上运行的kube-scheduler,以及提供API的kube-apiserver等。

    データプレーン

在每个工作节点上运行着一个名为kubelet的代理,每个Pod通过这个kubelet来执行。

kubernetes.drawio.png

部署与副本集

首先我们要深入理解数据平面部署。

    • DeploymentはReplicaSetと生成・管理し、ReplicaSetはPodを生成・管理する。

 

    ReplicaSetのみでも作成は可能だが、DeploymentでReplicaSetを作成できるので、手動でReplicaSetを作成するような利用する場面はほとんどないらしい

首先,我们要理解上述内容,然后从 ReplicaSet 中进行确认。

kubernetes_deployment.drawio.png

复制集合

复制集 ReplicaSet 管理 Pod 的数量。有时会简称为 RS。
例如,如果设置 replicas: 3 来维持 3 个 Pod,如果 Pod 数量不足/过多,它会自动进行调整以保持在 3 个。

似乎文件清单如下。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # ケースに応じてレプリカを修正する
  replicas: 3 #起動したいpod数
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

我們將在這一帶使用基本部署來進行。

部署

Deployment 是用来管理 replicaSet 的。详见 https://kubernetes.io/ja/docs/concepts/workloads/controllers/deployment/。

    • Containerのイメージが更新されたら新しいReplicaSetを作成し、ReplicaSetの新旧入れ替えをローリングアップデートで行ってくれる

 

    過去のReplicaSetを保持させ、必要であればロールバックさせることができる

有以下这些功能。
清单文件看起来是这样的。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

理解我認為當更新ReplicateSet時,如需將nginx版本從1.25.0升級到1.25.3,將如下所示。

kubernetes_deployment.png

在这种情况下,由于v1的ReplicaSet仍然存在,因此可以进行切换回去。

服务 (fú wù)

服务决定将流量路由到哪个Pod中。
这个服务有时候会被简称为”SVC”。
详情请参考以下链接:
https://kubernetes.io/ja/docs/concepts/services-networking/service/
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/expose/expose-intro/
通过使用标签,可以决定将流量路由到哪个Pod中。
标签是键值对,例如

    • 開発、テスト、および本番用のオブジェクトを指定する

 

    • バージョンタグを埋め込む

 

    タグを使用してオブジェクトを分類する
image.png

虽然还不够深入,但我理解了每个术语。
因为肯定还有一些我不了解的术语,所以我会边动笔边做笔记。

我在draw.io上创建了一些图形,但是图标没有名称,所以我参考了下面的文章来创建它们。
https://qiita.com/yosshi_/items/2db0a0e66a16711bfe5f

bannerAds