stormcat24 / kubernetes-handson

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

kubernetes-handson

💻Localでいい感じのKubernetes開発環境を揃える

💻kubectl

$ kubectl cluster-info

💻Dashboardのデプロイ

# Dashboardをデプロイ
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

$ kubectl -n kube-system get pod -l k8s-app=kubernetes-dashboard

💻Dashboardログイン用ユーザー作成

# ログイン用ユーザー作成
$ kubectl apply -f https://raw.githubusercontent.com/stormcat24/kubernetes-handson/master/01-setup/admin-user.yaml

# アクセストークンの表示
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

💻proxyを実行

$ kubectl proxy

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

💻Kubernetesの基本的なリソース・アプリケーションのデプロイ

💻Podを作成

# Podの作成
$ kubectl apply -f 02-resource/simple-echo.yaml
pod "simple-echo" created

# 作成したPodの確認
$ kubectl get pod

💻Podの操作

# echoコンテナのログ(標準出力)の確認
$ kubectl logs -f simple-echo -c echo

# nginxコンテナにSSHログインっぽいことをする(shの実行)
$ kubectl exec -it simple-echo sh -c nginx

# Podを削除
$ kubectl delete pod simple-echo

# ファイルを使って削除も可能
$ kubectl delete -f 02-resource/simple-echo.yaml

### 💻ReplicaSetの作成

```bash
# ReplicaSetの作成
$ kubectl apply -f 02-resource/simple-echo-rs.yaml

# 作成したReplicaSet, Podの確認
$ kubectl get rs,pod --selector app=echo

💻ReplicaSetの削除

# ReplicaSetの削除
$ kubectl delete -f 02-resource/simple-echo-rs.yaml

# 削除したリソースの確認(ReplicaSet、Podともに削除されている)
$ kubectl get rs,pod --selector app=echo

💻Deploymentの作成

# ReplicaSetの作成
$ kubectl apply -f 02-resource/simple-echo-deployment.yaml

# 作成したDeployment, ReplicaSet, Podの確認
$ kubectl get deploy,rs,pod --selector app=echo

💻Deploymentの削除

# Deploymentの作成
$ kubectl delete -f 02-resource/simple-echo-deployment.yaml

# 削除したDeployment, ReplicaSet, Podの確認
$ kubectl get deploy,rs,pod --selector app=echo

💻ディスカバリの実験

# 2種類のDeploymentを作成
$ kubectl apply -f 02-resource/simple-echo-deployment-spring.yaml
$ kubectl apply -f 02-resource/simple-echo-deployment-summer.yaml

# 作成したDeploymentの確認
$ kubectl get deploy --selector app=echo

💻Serviceの作成

# Serviceを作成
$ kubectl apply -f 02-resource/simple-echo-service.yaml

# 作成したServiceの確認
$ kubectl get svc --selector app=echo

💻デバッグ用Podから確認

# デバッグ用コンテナ
$ kubectl run -i --rm --tty debug --image=gihyodocker/fundamental:0.1.0 --restart=Never -- bash -il

# 作成したServiceに対してHTTP Request
debug:/# curl http://simple-echo/

# Pod名はそれぞれの環境で異なります

$ kubectl logs -f simple-echo-spring-xxxxx -c echo

$ kubectl logs -f simple-echo-summer-xxxxx -c echo

💻Serviceの変更

# Serviceの変更
$ kubectl apply -f 02-resource/simple-echo-service.yaml

# 再びデバッグコンテナからHTTP Request
debug:/# curl http://simple-echo/

# 今度はsummerの方にリクエストが来る
$ kubectl logs -f simple-echo-summer-xxxxx -c echo

💻ingress-nginx導入

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.21.0/deploy/mandatory.yaml

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.21.0/deploy/provider/cloud-generic.yaml

💻Ingress作成とHTTP Request

# Ingressを作成
$ kubectl apply -f 02-resource/simple-echo-ingress.yaml

# 作成したIngressを確認
$ kubectl get ing -l app=echo

# クラスタ外(ローカル)から、公開しているIngressに対してリクエストを送る 
$ curl http://localhost -H 'Host: echo.gihyo.local'

休憩

休憩中に作成したリソースを削除しておいてください🙏

$ kubectl delete -f 02-resource/simple-echo-ingress.yaml
$ kubectl delete -f 02-resource/simple-echo-service.yaml
$ kubectl delete -f 02-resource/simple-echo-deployment-summer.yaml
$ kubectl delete -f 02-resource/simple-echo-deployment-spring.yaml

💻Helmでアプリケーションをパッケージングする

💻Helmセットアップ

# Homebrewならば
$ brew install kubernetes-helm

# バイナリダウンロードならば
https://github.com/helm/helm/releases/tag/v2.12.1

# helm初期化(TillerというPodがデプロイされる)
$ helm init --wait

# helm確認
$ helm version
Client: &version.Version{SemVer:"v2.12.1", GitCommit:"02a47c7...", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.1", GitCommit:"02a47c7...", GitTreeState:"clean"}

💻Chartの検索

# Chartのリポジトリ確認
$ helm repo list

# リポジトリから適当にChart検索
$ helm search redmine

💻redmineデプロイ

# デフォルト値を上書きしてデプロイ
$ helm install -f 03-helm/redmine/redmine-values.yaml --name redmine stable/redmine

# helmで作られたリソースを確認
$ kubectl get ing,svc,pod -l release=redmine

💻redmine撤去

# helmでdeployしたリリース一覧
$ helm ls

# hostsでIngressに設定したドメインを追加
$ helm del --purge redmine

skaffoldでいい感じに開発を回してみる

kustomize+kubectl

# マニフェストを構築して標準出力に表示
$ kustomize build 04-skaffold/kustomize

# 一気にデプロイ
$ kustomize build 04-skaffold/kustomize | kubectl apply -f -

# 一気に削除
$ kustomize build 04-skaffold/kustomize | kubectl delete -f -

kustomizeとskaffold組み合わせ

# devコマンドで、デプロイと変更検知の待機
$ skaffold dev

About


Languages

Language:Smarty 100.0%