全て想蜒?ですが
読み方はケーツと読みます、半端ねーてす、あるいは半端ネー繧?
ケツが扱う最蟆?単位がPod縺?1つの觸??能を持つ・??Pod縺?1つ以上のコンテナを含む)
ReplicaSetは鐔??数縺?Podを組み合繧?せてアプリを実現する(Podの数の管理機能・??
Deployment縺?ReplicaSetを管理、アップデートの際は新鐔??ReplicaSetを作成してバージョン更新を行う(Podのデプロイ管理機能・??
Service縺?Deploymentに対し縺?IPアドレスやLBを設藹??してサービス觸??供する(Podへのアクセス管理機能・??
クラスター縺?Serviceが複数動縺?環藹??、少な縺?とも1つ縺?Master(node)と鐔??数縺?Nodeから構成され
Nodeはコンテナを動かす為のサーバ、Master縺?Nodeを管理しスケジューリングやオートスケールを行う
(非マネージドなら単一障害点にならないようマルチMaster3台が一般的)
cluster > namespace > node x workload (pod, <複謨?pod:deployment, job, statefulset>, <全て縺?node縺?pod:deamonset>)
namespaceは鐔??理的な分離、node poolは物理繝?ード・スケーリング管理
読み方はケーツと読みます、半端ねーてす、あるいは半端ネー繧?
ケツが扱う最蟆?単位がPod縺?1つの觸??能を持つ・??Pod縺?1つ以上のコンテナを含む)
ReplicaSetは鐔??数縺?Podを組み合繧?せてアプリを実現する(Podの数の管理機能・??
Deployment縺?ReplicaSetを管理、アップデートの際は新鐔??ReplicaSetを作成してバージョン更新を行う(Podのデプロイ管理機能・??
Service縺?Deploymentに対し縺?IPアドレスやLBを設藹??してサービス觸??供する(Podへのアクセス管理機能・??
クラスター縺?Serviceが複数動縺?環藹??、少な縺?とも1つ縺?Master(node)と鐔??数縺?Nodeから構成され
Nodeはコンテナを動かす為のサーバ、Master縺?Nodeを管理しスケジューリングやオートスケールを行う
(非マネージドなら単一障害点にならないようマルチMaster3台が一般的)
cluster > namespace > node x workload (pod, <複謨?pod:deployment, job, statefulset>, <全て縺?node縺?pod:deamonset>)
namespaceは鐔??理的な分離、node poolは物理繝?ード・スケーリング管理
■ケツリソース臀??隕?
Node:Kubernetes クラスタで藹??行するコンテナを配置するためのサーバ
Namespace:Kubernetes クラスタ内で臀??る仮想的なクラス繧?
Pod:コンテナ集合体の単位で、コンテナを実行する方觸??を定義する
ReplicaSet:同じ仕様縺?Podを複数生成・管理する
Deployment:Replica Setの臀??代管理をする
Service:Podの集合にアクセスするための軆??路を定義する
Ingress:Service を Kubernetes クラスタの藹??に公開する
ConfigMap:情報を定義し、Podに臀??給する
PersistentVolume:Podが利用するストレージのサイズや種別を定義する
PersistentVolumeClaim:PersistentVolumeを動的に確保する
StorageClass:PersistentVolumeが確臀??するストレージの種類を定義する
StatefulSet:同じ仕様で臀??諢?性のあるPodを複数生成・管理する
Job:常饅??目的ではない複数縺?Podを作成し、正常終了することを保証する
Cronjob:cron記法でスケジューリングして藹??行されるJob
Secret:認証情報軆??の觸??密データを定義する
Role:Namespace 内で操作可能縺? Kubernetes リソースのルールを定義する
RoleBinding:Role 縺? Kubernetes リソースを利用するユーザーを紐づける
ClusterRole:Cluster 全臀??で操作可能縺? Kubernetes リソースのルールを定義する
Cluster RoleBinding:ClusterRole 縺? Kubernetes リソースを利用するユーザーを紐づける
Service Account:Pod縺? Kubernetes リソースを操作させる際に利用するユーザ繝?
流れ
Dockerfile(設藹??)とアプリをdocker build/pushし
Dockerレジストリ縺?Dockerイメージを作成
GKEにデプロ繧?(deploymentファイ繝?.yml/serviceファイ繝?.ymlをkubectrl create/apply:manifest)
レプリケーションコントロー繝?:Pod数、オートスケールをdeployment fileで設定
サービス藹??義・??繝?ード縺?proxyデーモンが複謨?Podに鐔??荷分謨?
繝?ードがクラスタ内縺?Pod同士に振分けるクラス繧?IP
LBが振分ける外驛?IPを設藹??
K8s
クラスタリング・??複数サーバを束ねる)
コールドスタンバイ、ホットスタンバイ・??フェイルオーバ)
オーケストレーション窶?NW、Storage、スケジュール、IP、ルーティング、負荷分散、監鐔??、デプロイ・??ローリングアップデート)
構成
マスターサーバ(コントロールプレーン・??←kubectrl
etcd(DB:kvs形藹??縺?config=マニフェスト、デプロイメントとサービス軆??を記述・??
etcd(DB:kvs形藹??縺?config=マニフェスト、デプロイメントとサービス軆??を記述・??
レジストリサーバ(コンテナレジストリ・??GCSに臀??存)
↓
↓
ワーカー繝?ード>Pod>コンテナ(webサーバ)、コンテナ(ログ藹??集)、仮諠?NIC
ワーカー繝?ード、ワーカー繝?ード窶?
GKE
コンソールで設定+kubectrl
コンソール・??GCE、ストレージ、タスクキュー、BQ、cloudSQL、cloudDataStore、cloudソースレポジトリ、StackDriverLogging、StackDriverMonitoring、StackDriverTrace、CloudPlatform、BigTable、Pub/Sub、サービスコントロール、サービス管理
※コンソールだけ縺?kubectrl無しでイケそう
クラスタ臀??成>ワークロードでコンテナデプロイ、あるいは直接デプロイで簡易でイケる
クラスタ臀??成をすると臀??般公開で承鐔??NW、あるいは限定公開、はたまたIP範囲とか詳細を決められる
※コンソールだけ縺?kubectrl無しでイケそう
クラスタ臀??成>ワークロードでコンテナデプロイ、あるいは直接デプロイで簡易でイケる
クラスタ臀??成をすると臀??般公開で承鐔??NW、あるいは限定公開、はたまたIP範囲とか詳細を決められる
■流れ
GKEでクラスタを作成
Kubectrlをインス繧?
Kubectl縺?Podを立ち臀??げ>Deploymentができる、複謨?Podの起動も
Kubectlでサービス公開設藹??
【GCP入門編・第7回】Google Container Engine (GKE) で縺? Docker イメージの軆??ち臀??げ譁? | 株藹??会社トップゲート (topgate.co.jp)
サービスアカウント作成
ネームスペース、kubeサービスアカウント作成
Yamlで觸??能を宣鐔??しKubectlでデプロ繧?
時間の觸??かっていた処理をクラスタ觸??成で並列処理させて早く終繧?らすとか
ケツのツールを入れるとか、例え縺?Argoワークフローでデプロ繧?/デリバリ繝?/バッチスケジューラを動かす
DAG:有向非巡回グラフのや縺?
=========
helmを入れる(kubectrlを使うローカル縺?)とチャート記述でデプロイができる
テンプレートがありマニュフェスト記述からkubectrlあたりのデプロイを省力化できる
=========
master縺?workerで觸??成され冗長化を考慮すると最菴?master3台、worker2台・??のサーバ要るのでマージドが讌?
コンテナにはストレージを置かず外部に持たせた方が良いかも(ステートレスでファイルを保持しない)
DB縺?K8s上でな縺?マネージドサービスを使いたい
=========
VMからOSを抜いてアプリを入れたものがコンテナ、ドッカ―がOS以臀??を手配
Dockerがコンテナを管理、k8sがそ縺?Dockerをオーケストレーショ繝?
【GCP入門編・第7回】Google Container Engine (GKE) で縺? Docker イメージの軆??ち臀??げ譁? | 株藹??会社トップゲート (topgate.co.jp)
サービスアカウント作成
ネームスペース、kubeサービスアカウント作成
Yamlで觸??能を宣鐔??しKubectlでデプロ繧?
Pod(論理ホスト/インスタンスみたい縺?)
一諢?縺?IPが自動的に割り当てられる、Pod間縺?IPで通菫?
Pod内のコンテナ縺?localhost:ポートで臀??いに通信、コンテナ間で共有するストレー繧?
Podを直接作成は非推螂?
CPU/メモリの最蟆?と最大を設藹??
k8s縺?secretリソー繧?(≒SA key)縺?Pw/Oauthトーク繝?/SSH key等を含むオブジェクト(base64エンコード生)
使う方觸??3種饅??:コンテナにマウント、コンテナの環藹??変数、Pod生成時にケツがpull
=========時間の觸??かっていた処理をクラスタ觸??成で並列処理させて早く終繧?らすとか
ケツのツールを入れるとか、例え縺?Argoワークフローでデプロ繧?/デリバリ繝?/バッチスケジューラを動かす
DAG:有向非巡回グラフのや縺?
=========
helmを入れる(kubectrlを使うローカル縺?)とチャート記述でデプロイができる
テンプレートがありマニュフェスト記述からkubectrlあたりのデプロイを省力化できる
=========
master縺?workerで觸??成され冗長化を考慮すると最菴?master3台、worker2台・??のサーバ要るのでマージドが讌?
コンテナにはストレージを置かず外部に持たせた方が良いかも(ステートレスでファイルを保持しない)
DB縺?K8s上でな縺?マネージドサービスを使いたい
=========
VMからOSを抜いてアプリを入れたものがコンテナ、ドッカ―がOS以臀??を手配
Dockerがコンテナを管理、k8sがそ縺?Dockerをオーケストレーショ繝?
複数台でまとめたクラスターで故障があっても切り替え可用性を保縺?
そのクラスターをnamespaceで分割し複数チームで利用することも藹??
稼働中にサーバ追加のスケールをしたりロールバックできる
pod縺?IPを割り振ったり、DNS名を振ったり、負荷分散したり
自動デプロイでコンテナイメージをサーバ群へ藹??開する
Dockerのホスト管理、コンテナのスケジューリング、ローリングアップデート、死活監鐔??、ログ管理等々
Externalname>LoadBalancer>NodePort>ClusterIP
マネージド以藹??ならk8s用にユーザ管理も必要
Dockerはアプリイメージという感じ、それらを束ね管理するのがケーツ
Kubernetesとは臀??かを図で繧?かりやすく解説!Pod、Na…・??Udemy メディ繧? (benesse.co.jp)
ケツ縺?3か月ごとにアップデートされ知鐔??もアップデート必要だし、バージョンによって觸??能が変繧?り古いコードが動かないこともあり大藹??らしい
=========
↓実際のアプリがないとイメージ沸かん
クイックスタート: 言語に固有のアプリのデプロ繧? | Kubernetes Engine ドキュメント | Google Cloud
コンテナ化されたウェブ アプリケーションのデプロ繧? | Kubernetes Engine | Google Cloud
Cloud buildを使用してアプリをコンテナイメージにパッケージ化
GKEでクラスタを作成、コンテナイメージをクラスタにデプロ繧?
↓手始め?
GKE縺?nginxを外部アクセス可能にするま縺? - Qiita
Kubernetesでのコンポーネント間の通信をまとめる - Qiita
GCP におけるコンテナ入門 ~Kubernetes の臀??がすごい!? | クラウドエース株藹??会遉? (cloud-ace.jp)
GKE

これはいいかも
Objectsについて知る - オーケストレーションツー繝? (y-ohgi.com)
GKEクラスタをコンソールで臀??成
NATを作成
Cloud shellを起動
=========================
=========================
笳?DAGを使う
Kubernetes ネイティブなワークフローエンジ繝? Argo Workflows | 豆蔵デベロッパーサイト (mamezou-tech.com)
Argo公藹??マニフェストが長す縺?る?argo-helmでやるか
argo-helm/charts/argo-workflows at main · argoproj/argo-helm · GitHub
Quick Start - Argo Workflows - The workflow engine for Kubernetes (argoproj.github.io)
gcloud builds submit --pack image=gcr.io/bangboo-run/unco ならDockerfile不要らしい
ケツ縺?3か月ごとにアップデートされ知鐔??もアップデート必要だし、バージョンによって觸??能が変繧?り古いコードが動かないこともあり大藹??らしい
=========
↓実際のアプリがないとイメージ沸かん
クイックスタート: 言語に固有のアプリのデプロ繧? | Kubernetes Engine ドキュメント | Google Cloud
コンテナ化されたウェブ アプリケーションのデプロ繧? | Kubernetes Engine | Google Cloud
Cloud buildを使用してアプリをコンテナイメージにパッケージ化
GKEでクラスタを作成、コンテナイメージをクラスタにデプロ繧?
↓手始め?
GKE縺?nginxを外部アクセス可能にするま縺? - Qiita
Kubernetesでのコンポーネント間の通信をまとめる - Qiita
GCP におけるコンテナ入門 ~Kubernetes の臀??がすごい!? | クラウドエース株藹??会遉? (cloud-ace.jp)
GKE
これはいいかも
Objectsについて知る - オーケストレーションツー繝? (y-ohgi.com)
GKEクラスタをコンソールで臀??成
NATを作成
Cloud shellを起動
k8s用の鐔??証情報を藹??得
$ gcloud container clusters get-credentials <standard-cluster-1> --zone asia-northeast1-a
k8sオブジェクトを表示
$ kubectl get all
nginx dockerイメージを起動
$ kubectl run <handson> --image=nginx --port 80
LBを作成しトラフィックを流す設藹??
$ kubectl expose deploy <handson> --port=80 --target-port=80 --type=LoadBalancerサービスを表示(LBを見る)
$ kubectl get service
レプリカセットを表示
$ kubectl get replicaset
ポッドを表示
$ kubectl get pod
ポッドを削髯?
$ kubectl delete pod <handson-86f796b8b7-m68sr>
nginxコンテナ3台を立てる
$ kubectl run <handson-2> --image=nginx:1.14 --replicas=3
ポッドの詳細情報を表示
$ kubectl describe pod <handson-2-85dfb7fd88-wr58c>
デプロイメントを表示
$ kubectl get deployment
dockerイメージのバージョン藹??譖?
$ kubectl set image deployment <handson-3> <handson-3>=nginx:1.15
デプロイメントのレプリカセットの履歴を表示
$ kubectl rollout history deployment <handson-3>
$ kubectl rollout history deployment <handson-3> --revision=1
デプロイメントのロールバック・??nginx:1.14に戻す)
$ kubectl rollout undo deployment <handson-3>
デプロイメントを削髯?
$ kubectl delete deploy/<handson-2>
サービスを削髯?
$ kubectl delete service <handson>
マニフェストを作成(デプロイメントとサービス・??
vi manifest.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: handson-4
name: handson-4
spec:
selector:
matchLabels:
run: handson-4
template:
metadata:
labels:
run: handson-4
spec:
containers:
- image: nginx
name: handson-4
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
run: handson-4
name: handson-4
spec:
ports:
- port: 80
targetPort: 80
selector:
run: handson-4
type: LoadBalancer
マニフェストを適藹??(nginx縺?LBが作成される)
$ kubectl apply -f manifest.yaml
マニフェストで藹??義したオブジェクトを削髯?
$ kubectl delete -f manifest.yaml
Dockerfileの臀??成
$ vi Dockerfile
FROM google/cloud-sdk:latest
COPY . /app
RUN make app
CMD python /app/app.py
Dockerビルド
$ docker build -t myapp .
ビルドしたコンテナを起動
$ docker run -p 3000:3000 myapp
http://localhost:3000 へアクセスして確認
コンテナにタグ臀??け
$ docker tag myapp asia.gcr.io/${prjid}/myapp
GCRの鐔??險?
$ gcloud auth configure-docker
リポジトリ縺?Push
$ docker push asia.gcr.io/${prjid}/myapp
デプロ繧?
$ kubectl run myapp --image=asia.gcr.io/${prjid}/myapp
$ kubectl expose deploy myapp --port=80 --target-port=3000 --type=LoadBalancer
ポッドを増やす
$ kubectl scale deployment myapp --replicas=3
確鐔??
$ kubectl get all -l run=myapp
クラスタを削髯?
$ gcloud beta container clusters delete standard-cluster-1 --zone "asia-northeast1-a"
Dockerイメージの削髯?
$ gcloud container images list --repository asia.gcr.io/${prjid}
Dockerイメージの削髯?
$ gcloud container images delete asia.gcr.io/${prjid}/<myapp>
GKEのクラスター縺?Connect>クレデンシャ繝?cmdが分かる
gcloud contaier clusters get-credentials <clustername> --zone asia-northeast1-b --project unco
そのコマンドを承鐔??済縺?NWの環藹??で藹??行する
kubectl get pods -n <namespace> | grep xxx
Podを特藹??したい、オプショ繝?nでネームスペース、-n無しだと現鐔??縺?NS、--all-namespacesで蜈?NS
kubectl exec -it <podname> -n <namespace> -- /bin/bash
これ縺?Podに入れるの縺? python xxx.py とかコマンド可閭?
さらにアクセスが必要なら
さらにアクセスが必要なら
kubectl config get-contexts
コンテキスト一覧・??クラスタ、ユーザ、ネームスペースを組み合繧?せたもの・??を表示
kubectl config use-context <コンテキスト名>
コンテキスト切り替え
kubectl port-forward service/<srv> 8080:80
ポートフォワード先を設藹??
別ターミナルを立ち臀??げ
curl "http://localhost:8080/api/v1/namespaces/<namespace>/pods/<pod>"
curl --silent 127.0.0.1:8080 | head -n 10
curl --silent 127.0.0.1:8080 | head -n 10
Kubernetes API RESTのサブリソー繧?
サブリソースとは通常のリソース縺? HTTP パスに追加でサフィックスを付荳?した特別縺? HTTP パ繧?
Service proxy: /api/v1/namespaces/<namespace>/services/<scheme>:<service>:<port>/proxy/
Pod のログを藹??得する: /api/v1/namespaces/<namespace>/pods/<pod>/logs
Pod のポートを転送する: /api/v1/namespaces/<namespace>/pods/<pod>/portforward
Pod で任諢?のコマンドを実行する: /api/v1/namespaces/<namespace>/pods/<pod>/exe
コンテナ起動時
窶? ステートレスな状態を維持する
窶? スケールアウト可能なアーキテクチャにする
窶? 設藹??は藹??部から注入できるようにする
窶? ログは觸??準出力に觸??造化ログで出力する
窶? いつでも容易に停止できるようにする
窶? SIGTERM シグナルを繝?ンドリングする
窶? コンテナ上には単一プロセスのみ起動する
窶? ヘルスチェック用のエンドポイントを用諢?する
窶? アプリケーションの状態を可観測にする
窶? 起動時にアプリをダウンロードしない
ASM(anhtos service mesh)
サービスメッシュでマイクロサービス間で適切な通信する
マネージドな管理?監鐔??/デプロ繧?/イングレスセキュリティ・??コントロールプレーン・??
DBやミドルウェアは藹??して別途管理が良いらしい
DBやミドルウェアは藹??して別途管理が良いらしい
全臀??の雰囲觸??
サイドカープロキ繧?
ASMがGKE本臀??に蜜結合することな縺?プロキシとして全てのトラフィックを傍藹??できる
周辺的なタスクをこなすという諢?味合いか
=========================
笳?DAGを使う
Kubernetes ネイティブなワークフローエンジ繝? Argo Workflows | 豆蔵デベロッパーサイト (mamezou-tech.com)
Argo公藹??マニフェストが長す縺?る?argo-helmでやるか
argo-helm/charts/argo-workflows at main · argoproj/argo-helm · GitHub
Quick Start - Argo Workflows - The workflow engine for Kubernetes (argoproj.github.io)
gcloud builds submit --pack image=gcr.io/bangboo-run/unco ならDockerfile不要らしい





