一足遅れて Kubernetes を学び始める - 05. workloads その1 -
ストーリー
- 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -
- 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -
- 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -
- 一足遅れて Kubernetes を学び始める - 04. kubectl -
- 一足遅れて Kubernetes を学び始める - 05. workloads その 1 -
- 一足遅れて Kubernetes を学び始める - 06. workloads その 2 -
- 一足遅れて Kubernetes を学び始める - 07. workloads その 3 -
- 一足遅れて Kubernetes を学び始める - 08. discovery&LB その 1 -
- 一足遅れて Kubernetes を学び始める - 09. discovery&LB その 2 -
- 一足遅れて Kubernetes を学び始める - 10. config&storage その 1 -
- 一足遅れて Kubernetes を学び始める - 11. config&storage その 2 -
- 一足遅れて Kubernetes を学び始める - 12. リソース制限 -
- 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -
- 一足遅れて Kubernetes を学び始める - 14. スケジューリング -
- 一足遅れて Kubernetes を学び始める - 15. セキュリティ -
- 一足遅れて Kubernetes を学び始める - 16. コンポーネント -
前回
一足遅れて Kubernetes を学び始める - 04. kubectl -では、kubenetes の CLI ツール kubectl を学習しました。 今回は、目玉機能である workloads について学習します。
workloads
Kubernetes には、下記のようにリソースの種類が存在します。 今回は、Workloads を学習します。
| リソースの分類 | 内容 |
|---|---|
| Workloads リソース | コンテナの実行に関するリソース |
| Discovery&LB リソース | コンテナを外部公開するようなエンドポイントを提供するリソース |
| Config&Storage リソース | 設定・機密情報・永続化ボリュームなどに関するリソース |
| Cluster リソース | セキュリティやクォータなどに関するリソース |
| Metadata リソース | リソースを操作する系統のリソース |
※ Kubernetes の Workloads リソース(その 1)
Workloads には、下記 8 つの種類があります。
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- DaemonSet
- StatefulSet
- Job
- CronJob
Pod,ReplicationController,ReplicaSet,Deployment までを見ていきます。
Pod
コンテナを 1 つ以上含めた最小単位のリソース。 Pod 毎に IP アドレスが振られる。ボリュームは共有。 基本的に、Pod にコンテナを詰め込めるのではなく、「分離できるなら、分離する」方針がマイクロサービスとして良いそうです。 さっそく、動かしてみます。
※ alias k=kubectl
# sample-2pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample-2pod
spec:
containers:
- name: nginx-container
image: nginx:1.12
- name: redis-container
image: redis:3.2
pi@raspi001:~/tmp $ k apply -f . --prune --all
pod/sample-2pod created
pi@raspi001:~/tmp $ k get pod sample-2pod
NAME READY STATUS RESTARTS AGE
sample-2pod 2/2 Running 0 101s
期待通り複数のコンテナが動いていますね。(READY 2/2) exec で中に入る場合、どうなるのでしょうか。
pi@raspi001:~/tmp $ k exec -it sample-2pod /bin/sh
Defaulting container name to nginx-container.
Use 'kubectl describe pod/sample-2pod -n default' to see all of the containers in this pod.
#
なるほど、デフォルトのコンテナ(spec.containers の先頭)に入るみたいです。 redis-container に入る場合は、
pi@raspi001:~/tmp $ k exec -it sample-2pod -c redis-container /bin/sh
# redis-cli
127.0.0.1:6379> exit
#
-cでコンテナを指定するだけみたいです。
他にも説明したいことがありますが、長くなりそうなので切り上げます。
ReplicaSet, ReplicationController
レプリカという名前だけあって、Pod を複製するリソース。 過去の経緯から ReplicationController から ReplicaSet へ名前変更があったため、ReplicaSet を使うことが推奨
さっそく、動かしてみます。
# sample-rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: sample-rs
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.12
- name: redis-container
image: redis:3.2
pi@raspi001:~/tmp $ k apply -f . --prune --all
replicaset.apps/sample-rs created
pod/sample-2pod unchanged
pi@raspi001:~/tmp $ k get pods
NAME READY STATUS RESTARTS AGE
sample-2pod 2/2 Running 0 20m
sample-rs-ghkcc 2/2 Running 0 103s
sample-rs-nsc5b 0/2 ContainerCreating 0 103s
sample-rs-wk7vl 0/2 ContainerCreating 0 103s
確かに、replica3 つ(sample-rs)で、それぞれコンテナが2つ(READY 2/2)作れていますね。
書いて気になるのは、 pod の apiVersion は、v1に対して、replicaSet の apiVersion は、 apps/v1というのが気になりましたので、調べてみたところ、Kubernetes の apiVersion に何を書けばいいかという記事を見つけました。
Core となる機能は、v1で良いみたいです。
Kubernetes の目玉機能であるオーケストレーションの機能であるセルフヒーリングを試してみます。
pi@raspi001:~/tmp $ k get pods
NAME READY STATUS RESTARTS AGE
sample-2pod 2/2 Running 0 29m
sample-rs-ghkcc 2/2 Running 0 11m
sample-rs-nsc5b 2/2 Running 0 11m
sample-rs-wk7vl 2/2 Running 0 11m
pi@raspi001:~/tmp $ k delete pod sample-rs-wk7vl
pod "sample-rs-wk7vl" deleted
pi@raspi001:~/tmp $ k get pods
NAME READY STATUS RESTARTS AGE
sample-2pod 2/2 Running 0 30m
sample-rs-ghkcc 2/2 Running 0 11m
sample-rs-gq2hs 0/2 ContainerCreating 0 13s
sample-rs-nsc5b 2/2 Running 0 11m
おー、ContainerCreating されています。良いですね〜。 ちなみに、気になったのは node 自体が故障してダウンした場合は、どうなるのでしょうか。試してみます。
pi@raspi001:~/tmp $ k get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-2pod 2/2 Running 0 32m 10.244.1.25 raspi002 <none> <none>
sample-rs-ghkcc 2/2 Running 0 13m 10.244.1.26 raspi002 <none> <none>
sample-rs-gq2hs 2/2 Running 0 114s 10.244.1.27 raspi002 <none> <none>
sample-rs-nsc5b 2/2 Running 0 13m 10.244.2.15 raspi003 <none> <none>
raspi003 の電源を落としてみます。
worker(raspi003)に移動
~ $ slogin pi@raspi003.local
pi@raspi003.local's password:
pi@raspi003:~ $ sudo shutdown now
sudo: unable to resolve host raspi003
Connection to raspi003.local closed by remote host.
Connection to raspi003.local closed.
~ $
master(raspi001)に移動
pi@raspi001:~/tmp $ k get nodes
NAME STATUS ROLES AGE VERSION
raspi001 Ready master 5d16h v1.14.1
raspi002 Ready worker 5d16h v1.14.1
raspi003 NotReady worker 4d21h v1.14.1
pi@raspi001:~/tmp $ k get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-2pod 2/2 Running 0 35m 10.244.1.25 raspi002 <none> <none>
sample-rs-ghkcc 2/2 Running 0 17m 10.244.1.26 raspi002 <none> <none>
sample-rs-gq2hs 2/2 Running 0 5m38s 10.244.1.27 raspi002 <none> <none>
sample-rs-nsc5b 2/2 Running 0 17m 10.244.2.15 raspi003 <none> <none>
ん? raspi003 で動いている? 数十秒後...
pi@raspi001:~/kubernetes-perfect-guide/samples/chapter05/tmp $ k get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-2pod 2/2 Running 0 40m 10.244.1.25 raspi002 <none> <none>
sample-rs-ghkcc 2/2 Running 0 22m 10.244.1.26 raspi002 <none> <none>
sample-rs-gq2hs 2/2 Running 0 10m 10.244.1.27 raspi002 <none> <none>
sample-rs-nsc5b 2/2 Terminating 0 22m 10.244.2.15 raspi003 <none> <none>
sample-rs-p2jsc 2/2 Running 0 53s 10.244.1.28 raspi002 <none> <none>
おー、期待通り raspi003 にある pod が消えて、raspi002 に作り直されました。sample-rs-nsc5b は node が落ちちゃっているので、消すこともできず残り続けます。
少し待ち時間が長いような?
Kubernetes はクラスタで障害があったとき、どういう動きをするのかという記事によれば、kube-controller-manager が検知して、kube-scheduler が正しい数に揃えているみたいです。数十秒待たされたのは、検知の間隔のせいでしょうか。
kube-controller-managerのオプションで、--attach-detach-reconcile-sync-period duration Default: 1m0sとあります。1 分間隔なのですかね。
Pod を特定の Node で動かさないようにしたい
みたいな要望を叶えれるのでしょうか。
Assigning Pods to Nodesによると、nodeSelector フィールドでアサインされる node を指定できるそうです。(除外ではなく、指定) ただし、Editing nodeSelector doesn't rearrange pods in ReplicaSetによると、それは replicaSet ではなく、deployment で行うべきとのことです。replicaSet で動くかどうか、念の為試してみます。
まず、先程落とした raspi003 を電源を入れ直して起動させます。 その後、master(raspi001)に移動。
pi@raspi001:~/tmp $ k label nodes raspi002 type=AWS
node/raspi002 labeled
pi@raspi001:~/tmp $ k label nodes raspi003 type=GCP
node/raspi003 labeled
pi@raspi001:~/tmp $ k get nodes -L type
NAME STATUS ROLES AGE VERSION TYPE
raspi001 Ready master 5d17h v1.14.1
raspi002 Ready worker 5d17h v1.14.1 AWS
raspi003 Ready worker 4d21h v1.14.1 GCP
pi@raspi001:~/tmp $ k get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-2pod 2/2 Running 0 75m 10.244.1.25 raspi002 <none> <none>
sample-rs-ghkcc 2/2 Running 0 56m 10.244.1.26 raspi002 <none> <none>
sample-rs-gq2hs 2/2 Running 0 44m 10.244.1.27 raspi002 <none> <none>
sample-rs-p2jsc 2/2 Running 0 35m 10.244.1.28 raspi002 <none> <none>
node にラベルを貼って、nodeSelector しやすいようにしました。 sample-rs は、全て raspi002 で動いているので、下記を試してみます。
- sample-rs は raspi002 でのみ動くよう設定
- raspi002 をシャットダウン
その結果、「sample-rs は raspi002 が動いていないので、セルフヒーリングしない」ことを期待します。
# sample-rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: sample-rs
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.12
- name: redis-container
image: redis:3.2
nodeSelector:
type: AWS
pi@raspi001:~/tmp $ k apply -f . --prune --all
replicaset.apps/sample-rs configured
pod/sample-2pod unchanged
nodeSelector を追加しました。 今回は単純な指定なのでこれで良いですが、より柔軟に指定したい場合は nodeAffinity を使うそうです。
worker(raspi002)に移動
~ $ slogin pi@raspi002.local
pi@raspi002.local's password:
pi@raspi002:~ $ sudo shutdown now
sudo: unable to resolve host raspi002
Connection to raspi002.local closed by remote host.
Connection to raspi002.local closed.
~ $
数十秒待つ... 結果は...!
master(raspi001)に移動
pi@raspi001:~/tmp $ k get nodes -L type
NAME STATUS ROLES AGE VERSION TYPE
raspi001 Ready master 5d17h v1.14.1
raspi002 NotReady worker 5d17h v1.14.1 AWS
raspi003 Ready worker 4d22h v1.14.1 GCP
pi@raspi001:~/tmp $ k get pods -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-2pod 2/2 Terminating 0 89m 10.244.1.25 raspi002 <none> <none>
sample-rs-4srpp 0/2 Pending 0 36s <none> <none> <none> <none>
sample-rs-6mgcr 0/2 Pending 0 37s <none> <none> <none> <none>
sample-rs-ghkcc 2/2 Terminating 0 71m 10.244.1.26 raspi002 <none> <none>
sample-rs-gq2hs 2/2 Terminating 0 59m 10.244.1.27 raspi002 <none> <none>
sample-rs-lc225 0/2 Pending 0 36s <none> <none> <none> <none>
sample-rs-p2jsc 2/2 Terminating 0 49m 10.244.1.28 raspi002 <none> <none>
期待通りでした。つまり、sample-rs は raspi002 以外で作り直せないので、Pending,Terminating 状態です。 また、単純な pod である sample-2pod は replicaSet ではないので、セルフヒーリングされずに Terminating になっています。 面白いですね。これ。
Deployment
複数の ReplicaSet を管理。 ReplicaSet にない「ローリングアップデート、ロールバック」機能が存在。 Pod や ReplicaSet ではなく、Deployment が最も推奨されるリソース種類。
ReplicaSet では、指定したコンテナイメージを更新した場合(アップデート)、どうなるのでしょうか。すべて更新されるのか、一部だけなのでしょうか。試してみます。
sample-2pod-replica.yaml の nginx イメージを 1.12 から 1.13 に更新しました。
pi@raspi001:~/tmp $ k get all
NAME READY STATUS RESTARTS AGE
pod/sample-rs-4srpp 2/2 Running 0 7h14m
pod/sample-rs-6mgcr 2/2 Running 0 7h14m
pod/sample-rs-lc225 2/2 Running 0 7h14m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d
NAME DESIRED CURRENT READY AGE
replicaset.apps/sample-rs 3 3 3 8h
pi@raspi001:~/tmp $ k apply -f . --prune --all
replicaset.apps/sample-rs configured
pod/sample-2pod created
pi@raspi001:~/tmp $ k describe replicaset sample-rs
Name: sample-rs
...
Containers:
nginx-container:
Image: nginx:1.13
...
replicaset のマニュフェストは更新されました。
pi@raspi001:~/tmp $ k describe pod sample-rs-4srpp
Name: sample-rs-4srpp
...
nginx-container:
Container ID: docker://9160f550ee9d9bbcd1a5c990ca95389b2b39aff6688bcd933c99fe93b1968b99
Image: nginx:1.12
...
pod は変化なしのようです。 では、Deployment を使ってみます。
# sample-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.12
ports:
- containerPort: 80
pi@raspi001:~/tmp $ k apply -f . --prune --all --record
replicaset.apps/sample-rs configured
pod/sample-2pod configured
deployment.apps/sample-deployment created
--recordをつけることで、履歴を保持することができます。ロールバックに使います。
pi@raspi001:~/tmp $ k get all
NAME READY STATUS RESTARTS AGE
pod/sample-2pod 2/2 Running 0 12m
pod/sample-deployment-6cd85bd5f-4whgn 1/1 Running 0 119s
pod/sample-deployment-6cd85bd5f-js2sw 1/1 Running 0 119s
pod/sample-deployment-6cd85bd5f-mjt77 1/1 Running 0 119s
pod/sample-rs-4srpp 2/2 Running 0 7h28m
pod/sample-rs-6mgcr 2/2 Running 0 7h28m
pod/sample-rs-lc225 2/2 Running 0 7h28m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d1h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/sample-deployment 3/3 3 3 2m
NAME DESIRED CURRENT READY AGE
replicaset.apps/sample-deployment-6cd85bd5f 3 3 3 2m
replicaset.apps/sample-rs 3 3 3 8h
sample-deployment が、deployment,replicaset,pod を作成しました。
では、sample-deployment の nginx コンテナを 1.12 から 1.13 に更新してみます。
# sample-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.13
ports:
- containerPort: 80
pi@raspi001:~/tmp $ k apply -f . --prune --all --record
replicaset.apps/sample-rs unchanged
pod/sample-2pod unchanged
deployment.apps/sample-deployment configured
pi@raspi001:~/tmp $ k get pod
NAME READY STATUS RESTARTS AGE
sample-2pod 2/2 Running 0 15m
sample-deployment-6cd85bd5f-js2sw 1/1 Running 0 4m53s
sample-deployment-6cd85bd5f-mjt77 1/1 Running 0 4m53s
sample-deployment-7dfb996c6b-gh2cg 0/1 ContainerCreating 0 21s
sample-deployment-7dfb996c6b-m4wrd 1/1 Running 0 38s
sample-rs-4srpp 2/2 Running 0 7h31m
sample-rs-6mgcr 2/2 Running 0 7h31m
sample-rs-lc225 2/2 Running 0 7h31m
おー、deployment の pod が作り変わっていっています。これがローリングアップデートです。 ローリングアップデートは、spec.template 以下が更新されると変化したとみなすそうです。 また、ロールバックは、rollout コマンドで実施できますし、revision 指定で戻すこともできます。 しかし、基本的にはマニュフェストを戻して apply すべきです。
アップデート戦略というものがあり、デフォルトは RollingUpdate です。過不足分の Pod 考慮した更新戦略になります。 アップデート中に許容される不足分と超過分を設定できます。(maxUnavailable, maxSurge) 他の戦略として、Recreate 戦略があります。こちらは、全て同時に作り直しになります。ですので、一時的にアクセス不可になってしまいます。
1つ不安に感じたものとして、「フロントエンドのバージョンを1から2にアップデートしたら、バージョン 1 のコンテナにアクセスしたユーザがバージョン 2 のコンテナに遷移したら大丈夫なのかな」と思いました。しかし、これはローリングアップデートに限った話ではないので、それは考えないこととしました。ちゃんと設計すれば良い話ですね。
ちなみに、マニュフェストを書かずに deployment ができます。k run sample-deployment-cli --image nginx:1.12 --replicas 3 --port 80です。お試しなら、便利ですね。
お片付け
試しに、prune で削除しています。
pi@raspi001:~/tmp $ ls
sample-2pod-replica.yaml sample-2pod.yaml sample-deployment.yaml
pi@raspi001:~/tmp $ mv sample-2pod-replica.yaml sample-2pod-replica.yaml.org
pi@raspi001:~/tmp $ mv sample-deployment.yaml sample-deployment.yaml.org
pi@raspi001:~/tmp $ k apply -f . --all --prune
pod/sample-2pod configured
deployment.apps/sample-deployment pruned
replicaset.apps/sample-rs pruned
pi@raspi001:~/tmp $ k get all
NAME READY STATUS RESTARTS AGE
pod/sample-2pod 2/2 Running 0 30m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d1h
んー、こうすると消せるのですが、どうしても1ファイル残してしまいます...。
すべて org にすると、k apply -f .が失敗しますし...。
pi@raspi001:~/tmp $ k delete pod sample-2pod
pod "sample-2pod" deleted
結局、こうしました...。
pi@raspi001:~/tmp $ k label node raspi002 type-
pi@raspi001:~/tmp $ k label node raspi003 type-
おわりに
思った以上に、ReplicaSet にハマってしまいました。 次は、残りの workloads を試します。 次回はこちらです。
Tags
2019-07-27
今回、東京で開催されましたCloud Native Days Tokyo 2019に2日間とも参加してきましたので、報告しようと思います。セッション毎の報告というより、全体を通した感想を話そうかなと思います。...
2019-06-10
前回 一足遅れて Kubernetes を学び始める - 15. セキュリティ -では、RBACによる権限について学習しました。今回は最後にKubernetesのコンポーネントについて学習します。...
2019-06-07
前回 一足遅れて Kubernetes を学び始める - 14. スケジューリング -では、AffinityなどでPodのスケジューリングについて学習しました。今回は、セキュリティについて学習します。...
2019-06-05
前回 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -では、requestsやlimitといったヘルスチェックの仕方を学びました。今回は、Affinityなどによるスケジューリングについて学習します。...
2019-06-01
大阪からKubernetes Meetup Tokyoに参加できるとのことで、こちらに参加してきました。Kubernetesの生みの親である3人の内の1人のJoe Bedaから、Kubernetesの歴史の経緯について教えて頂きました。その話がとてもわかりやすく、なるほどなと思ったので、ぜひとも共有したいと思います。...
2019-05-30
前回 一足遅れて Kubernetes を学び始める - 12. リソース制限 -では、requestsやlimitなどのリソース制限について学習しました。今回は、ヘルスチェックとコンテナライフサイクルについて学習します。...
2019-05-29
前回 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -では、storageについて学習しました。今回は、リソース制限について学習します。...
2019-05-27
前回 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -では、configについて学習しました。今回は、storageを学びます。...
2019-05-23
前回 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -では、様々なserviceを学習しました。今回は、config&storageのconfigを学びます。...
2019-05-22
今回、k8sの体験を目的として参加したのですが、意外な収穫があったので、共有したく、記事を書くことにしました。...
2019-05-15
前回 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -でServiceについての概要を学びました。今回は下記を一気に学びます。...
2019-05-07
前回 一足遅れて Kubernetes を学び始める - 07. workloads その3 -でようやくworkloadsが終了しました。今回は、discovery&LBを進めようと思います。...
2019-05-06
前回 一足遅れて Kubernetes を学び始める - 06. workloads その2 -にて、DaemonSetとStatefulSet(一部)を学習しました。今回は、StatefulSetの続きとJob,CronJobを学習します。...
2019-05-05
前回 一足遅れて Kubernetes を学び始める - 05. workloads その1 -では、Pod,ReplicaSet,Deploymentの3つを学習しました。今回はDaemonSet,StatefulSet(一部)を学びます。...
2019-05-02
前回 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPiの環境にKubernetesを導入しました。無事、動作確認ができたので、さっそく学習していきたいです。...
2019-04-28
前回 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -では、MacでKubernetesを軽く動かしてみました。DockerForMacでは、NodeがMasterのみだったため、Kubernetesを学習するには、ものたりない感がありました。そこで、RaspberryPiを使っておうちKubernetesを構築することになりました。...
2019-04-27
前回 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。...
2019-04-18
経緯 Kubernetesを使えるようになりたいな〜(定義不明) けど、他にやりたいこと(アプリ開発)あるから後回しにしちゃえ〜!!と、今までずっと、ちゃんと学ばなかったKubernetesを、本腰入れて使ってみようと思います。...
2019-06-10
前回 一足遅れて Kubernetes を学び始める - 15. セキュリティ -では、RBACによる権限について学習しました。今回は最後にKubernetesのコンポーネントについて学習します。...
2019-06-07
前回 一足遅れて Kubernetes を学び始める - 14. スケジューリング -では、AffinityなどでPodのスケジューリングについて学習しました。今回は、セキュリティについて学習します。...
2019-06-05
前回 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -では、requestsやlimitといったヘルスチェックの仕方を学びました。今回は、Affinityなどによるスケジューリングについて学習します。...
2019-05-30
前回 一足遅れて Kubernetes を学び始める - 12. リソース制限 -では、requestsやlimitなどのリソース制限について学習しました。今回は、ヘルスチェックとコンテナライフサイクルについて学習します。...
2019-05-29
前回 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -では、storageについて学習しました。今回は、リソース制限について学習します。...
2019-05-27
前回 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -では、configについて学習しました。今回は、storageを学びます。...
2019-05-23
前回 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -では、様々なserviceを学習しました。今回は、config&storageのconfigを学びます。...
2019-05-15
前回 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -でServiceについての概要を学びました。今回は下記を一気に学びます。...
2019-05-07
前回 一足遅れて Kubernetes を学び始める - 07. workloads その3 -でようやくworkloadsが終了しました。今回は、discovery&LBを進めようと思います。...
2019-05-06
前回 一足遅れて Kubernetes を学び始める - 06. workloads その2 -にて、DaemonSetとStatefulSet(一部)を学習しました。今回は、StatefulSetの続きとJob,CronJobを学習します。...
2019-05-05
前回 一足遅れて Kubernetes を学び始める - 05. workloads その1 -では、Pod,ReplicaSet,Deploymentの3つを学習しました。今回はDaemonSet,StatefulSet(一部)を学びます。...
2019-05-02
前回 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPiの環境にKubernetesを導入しました。無事、動作確認ができたので、さっそく学習していきたいです。...
2019-04-28
前回 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -では、MacでKubernetesを軽く動かしてみました。DockerForMacでは、NodeがMasterのみだったため、Kubernetesを学習するには、ものたりない感がありました。そこで、RaspberryPiを使っておうちKubernetesを構築することになりました。...
2019-04-27
前回 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。...
2019-04-18
経緯 Kubernetesを使えるようになりたいな〜(定義不明) けど、他にやりたいこと(アプリ開発)あるから後回しにしちゃえ〜!!と、今までずっと、ちゃんと学ばなかったKubernetesを、本腰入れて使ってみようと思います。...
2021-09-04
コンパイラ基盤であるLLVMについて、全く知識がない私が、javascriptソースコードをパースしLLVMでコンパイルできるようになりました。LLVMの記事は数多くありますが、初心者向けの記事が少なく感じたため、本記事では、できる限り分かりやすくLLVMについて紹介できる記事を書こうと思います。ソースコードは、こちらに置いています。...
2020-07-10
どうも、こんにちは。Re:ゼロ2期 始まりましたね、 @silverbirderです。最近、仕事の関係上、Apache Beam + Kotlin を使うことになりました。それらの技術が一切知らなかったので、この記事に学んだことを書いていきます。...
2019-06-10
前回 一足遅れて Kubernetes を学び始める - 15. セキュリティ -では、RBACによる権限について学習しました。今回は最後にKubernetesのコンポーネントについて学習します。...
2019-06-07
前回 一足遅れて Kubernetes を学び始める - 14. スケジューリング -では、AffinityなどでPodのスケジューリングについて学習しました。今回は、セキュリティについて学習します。...
2019-06-05
前回 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -では、requestsやlimitといったヘルスチェックの仕方を学びました。今回は、Affinityなどによるスケジューリングについて学習します。...
2019-05-30
前回 一足遅れて Kubernetes を学び始める - 12. リソース制限 -では、requestsやlimitなどのリソース制限について学習しました。今回は、ヘルスチェックとコンテナライフサイクルについて学習します。...
2019-05-29
前回 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -では、storageについて学習しました。今回は、リソース制限について学習します。...
2019-05-27
前回 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -では、configについて学習しました。今回は、storageを学びます。...
2019-05-23
前回 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -では、様々なserviceを学習しました。今回は、config&storageのconfigを学びます。...
2019-05-22
今回、k8sの体験を目的として参加したのですが、意外な収穫があったので、共有したく、記事を書くことにしました。...
2019-05-15
前回 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -でServiceについての概要を学びました。今回は下記を一気に学びます。...
2019-05-07
前回 一足遅れて Kubernetes を学び始める - 07. workloads その3 -でようやくworkloadsが終了しました。今回は、discovery&LBを進めようと思います。...
2019-05-06
前回 一足遅れて Kubernetes を学び始める - 06. workloads その2 -にて、DaemonSetとStatefulSet(一部)を学習しました。今回は、StatefulSetの続きとJob,CronJobを学習します。...
2019-05-05
前回 一足遅れて Kubernetes を学び始める - 05. workloads その1 -では、Pod,ReplicaSet,Deploymentの3つを学習しました。今回はDaemonSet,StatefulSet(一部)を学びます。...
2019-05-02
前回 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPiの環境にKubernetesを導入しました。無事、動作確認ができたので、さっそく学習していきたいです。...
2019-04-28
前回 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -では、MacでKubernetesを軽く動かしてみました。DockerForMacでは、NodeがMasterのみだったため、Kubernetesを学習するには、ものたりない感がありました。そこで、RaspberryPiを使っておうちKubernetesを構築することになりました。...
2019-04-27
前回 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。...
2019-04-18
経緯 Kubernetesを使えるようになりたいな〜(定義不明) けど、他にやりたいこと(アプリ開発)あるから後回しにしちゃえ〜!!と、今までずっと、ちゃんと学ばなかったKubernetesを、本腰入れて使ってみようと思います。...