Kubernetesとは

k8sはコンテナのオーケストレーションツール
複数の物理マシンに複数のコンテナがあることが前提
1台1台の物理マシンの中に複数のコンテナがある
定義ファイル(マニュフェストファイル)を作成すれば、コンテナを作成管理してくる
 L etcd(データベース)に書き込まれる
docker-composeは作って終わりだが、k8sはその状態を維持する。監視も行う

### マスターノードとワーカーノード
クラスターは定義ファイルに基づいて自立して動く
k8sは仮想ネットワークドライバであるCNIをインストールする必要がある
マスターノードではコントロールプレーンでワーカーノードを管理

### 用語
Pod: コンテナとボリュームがセットになったもの
Service: Podをまとめて管理する
ReplicaSet: Podの数を管理

### 定義ファイル

apiVersion: v1
kind: Pod
metadata:
  name: apa000pod
  labels:
    app: apa000kube
spec:
  containers:
    - name: apa000ex91
      image: httpd
      ports:
        - containerPort: 80

apa000dep.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apa000dep
spec:
  selector:
    matchLabels:
      app: apa000kube
  replicas: 3
  template:
    metadata:
      labels:
        app: apa000kube
    spec:
      containers:
      - name: apa000ex91
        image: httpd
        ports:
        - containerPort: 80

service

apiVersion: v1
kind: Service
metadata:
  name: apa000ser
spec:
  type: NodePort
  ports:
  - port: 8099
    targetPort: 80
    protocol: TCP
    nodePort: 30080
  selector:
    app: apa000kube

### kubernetsコマンド
$ kubectl ${command} ${option}
create, edit, delete, get, set, apply, describe, diff, expose, scale, autoscale, rollout, exec, run, attach, cp, logs, cluster-info, top

$ kubectl apply -f *.yml
$ kubectl get pods
$ kubectl apply -f *.yml
$ kubectl get services

OK、さー仕事するぞー

k8s 元に

apiVersion: v1
kind: Pod
metadata:
  name: web-pod
  labels:
    svc2pod: web
spec:
  containers:
  - name: nginx
    image: nginx:1.17.6-alpine
    ports:
    - name: http
      containerPort: 80

apiVersion, kind, metadata, spec
labelsでリソースを分類する

Dockerで簡単な構成でイメージ開発とテストを行い、その後でk8sの複雑な構成で利用する

なるほどー、Dockerをやらんとヤバいな…

kubernetes基礎

公式サイト: kubernetes
Kuberntes Github:kubernetes / kubernetes

– 実行環境に依存しない(AWS, GCP, オンプレ)
– Docker以外のコンテナも可
– 複数ホストにコンテナをデプロイ
– サーバ台数関係なく、コンピュータ資源を最適化して複数のapplicationを起動できる(コンテナのリソースアロケーション)
– 負荷に応じてapplicationごとに自動で数を増減できる(コンテナの負荷分散)
– サーバを入れ替えることなくapplicationのデプロイが可能

masterとよばれる親機とnodeとよばれる子機サーバを用意して、kubernetesをそれぞれインストールして通信設定
ECSやGKEなどkubernetesマネージドサービスがある

k8sの構成は以下の通り
Ingress(通信内容をServiceにプロキシする)
Service(複数のPodに対して単一IPアドレスを割り当てる機能) ロードバランサのように振る舞う。ClusterIP、NodePort, LoadBalancer, ExternalNameなど
Cluster
L Node(コンテナをデプロイするための物理サーバ) k8sを管理するデーモンはNode上で実行
L Pod(デプロイの最小単位) 
L コンテナ

MiniKube:ローカルのVM内にk8sクラスタ内のコンテナを操作するためのKubernetesMasterと単一ノードのk8sクラスタを構築する

まずはminikubeで理解していくってことか?

Kubernetesをインストールしよう

[vagrant@localhost waymo-od]$ sudo yum -y install bash-completion tcpdump chrony wget git

[vagrant@localhost waymo-od]$ sudo vi /etc/yum.repos.d/virt7-docker-common-release.repo

name=virt7-docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=0

[vagrant@localhost waymo-od]$ sudo yum -y install –enablerepo=virt7-docker-common-release kubernetes etcd flannel
読み込んだプラグイン:fastestmirror
File contains no section headers.
file: file:///etc/yum.repos.d/virt7-docker-common-release.repo, line: 1
‘name=virt7-docker-common-release\n’

ん?section headers?

sudo yum -y install –enablerepo=virt7-docker-common-release kubernetes etcd flannel

エラー: パッケージ: etcd-2.0.9-1.el7.x86_64 (virt7-docker-common-release)
要求: systemd
エラー: パッケージ: docker-1.6.2-4.gitc3ca5bb.el7.x86_64 (virt7-docker-common-release)
要求: systemd
エラー: パッケージ: flannel-0.2.0-7.el7.x86_64 (virt7-docker-common-release)
要求: systemd

kubernetesとは?

kubernetesとは?
-> 自動デプロイ、スケーリング、アプリ・コンテナの運用自動化のために設計されたオープンソースのプラットフォーム
-> Dockerコンテナをクラスタ化した際の運用ツール

– アプリを迅速に予定通りにデプロイ(コンテナをサーバー群に展開)
– 稼働中にアプリをスケール(稼働中にコンテナ数を変更)
– 新機能をシームレスに提供開始(稼働中にロールアウト)
– ハードウェアの利用率を要求に制限(コンテナで共存させて稼働率を高くする)

パブリッククラウド、プライベートクラウド、ハイブリッドクラウド、マルチクラウド
モジュール化、追加可能、接続可能、構成可能
自動配置、自動再起動、自動複製、自動スケーリング

管理上の基本単位はPodという
– volume: 記憶領域を共有するコンテナの集まり
– Container
– IP ADress

要するに、
– アプリを迅速に予定通りにデプロイ
– 稼働中にアプリをスケールする
ことができるらしい。。。