RancherからKubernetesを覚える(Node/Pod/Service/LoadBalancer)
RancherからKubernetesを覚える
Kubernetes完全ガイド(今後、良書と略す)に書いている内容をRancherを使いながら見てみた記事になります。
Kubernetesの理解を深めるのと、Rancherからだとどんな風に(どこまで)できるかを整理してみました。
なお、記事上に出てくる「参照:Pxx」は良書のページです。
ここでは前提として、GKEで作成したKubernetesをRancherから見える状態にしています。
Node
Rancherからの確認
Rancherの画面を起動してクラスタを選択すると、まずはノードの状態が見れます。
CPU/メモリ/Podなどの上限値や確保済み(使用済み)の数が確認できます。
kubectlからの確認
これと同じものをkubectlで見ると以下のような感じで、ノードの上限値、起動中のPod数、CPUやメモリのRequests/Limitsが見れます。
良書に書かれてますが、リソース確保されているのは、Requests値なので、Rancher上で見える使用量も各ノードのRequests値の合計になっていました。
参照:P.258
kubectl describe node <ノード名>
...
Allocatable:
attachable-volumes-gce-pd: 127
cpu: 1930m
ephemeral-storage: 18858075679
hugepages-2Mi: 0
memory: 5776416Ki
pods: 110
…
Non-terminated Pods: (10 in total)
...
Resource Requests Limits
-------- -------- ------
cpu 509m (26%) 1146m (59%)
memory 435Mi (7%) 1045Mi (18%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
Namespace
Rancherからの操作
単純な作成だけでなく、LimitRangeによるPodへの制限もかけれます。(requests/limits)
リソースクォータは設定できなさそうでした。
制約 | 内容 |
---|---|
LimitRange | Namespace内のPodにCPU/メモリなどの使用上限を設定する |
リソースクォータ | Namespaceにリソース作成の制限を設ける |
なお、Rancherでは複数のNamespaceを束ねたプロジェクトという概念がありますが、Namespaceと混同しないように注意が必要。
参照:Namespace P.255 LimitRangeによるリソース制限 P.264 リソースクォータ P.270
kubectlからの操作
Namespaceの確認
kubectl describe namespace <ネームスペース>
Resource Quotas
Name: gke-resource-quotas
Resource Used Hard
-------- --- ---
count/ingresses.extensions 0 100
count/jobs.batch 0 5k
pods 0 1500
services 0 500
Resource Limits
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container memory - - 256Mi 512Mi -
Container cpu - - 1500m 2 -
LimitRangeの確認
kubectl describe limitrange -n <ネームスペース>
Name: xxxxxx-xxxxx-xxxxxx-xxxxxx
Namespace: dapr
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu - - 500m 1 -
Container memory - - 256Mi 512Mi -
LimitRangeの設定
apiVersion: v1
kind: LimitRange
metadata:
name: xxxxx-xxxxx-xxxxxx-xxxxxx
namespace: xxxx
spec:
limits:
- type: Container
default:
memory: 1024Mi
cpu: 1000m
defaultRequest:
memory: 512Mi
cpu: 500m
max:
memory: 2048Mi
cpu: 2000m
min:
memory: 256Mi
cpu: 100m
kubectl apply -f limitRange.yaml
kubectl describe limitrange -n <ネームスペース>
Resource Limits
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu 100m 2 500m 1 -
Container memory 256Mi 2Gi 512Mi 1512Mi -
なお、metadataのnameはdescribe limitrangeで確認したものと同じにしないと、別行でできてしまいます。
ResourceQuota
リソースクォータはRancherの画面からは設定できなかったので、kubectlで直接設定。
apiVersion: v1
kind: ResourceQuota
metadata:
name: sample-resourcequota
namespace: default
spec:
hard:
count/services: 10
count/deployments.apps: 10
リソース
Rancherでリソースを作成する箇所は2カ所。
1つはクラスタのプロジェクトを開いたら表示されているWorkloads〜Volumes
もうひとつはヘッダのResourcesメニューを開いたら出てくるWorkloads〜Config
今回は、Workloads、LoadBalancing、ServiceDiscoveryの3つについて確認。
Workloads
Rancherからの設定
ワークロードのデプロイは、Rancherからはタイプ(Deployment/Daemonset/StatefulSet/Job/CronJob)、ポートマッピング、スケジューラー、ヘルスチェック、ボリューム、スケーリングポリシーなどを画面から指定して、デプロイすることが可能。
Rancherの画面からデプロイした場合、Workloadだけでなく、Serviceも生成される。
また、デプロイ結果のYAMLのダウンロードやYAMLをアップロードしてのデプロイなどもできますので、まずは画面で作成して、結果のYAMLを管理して、変更はYAMLからのような運用も可能。
参照:Deploymentのアップデート戦略 P.108 スケジューリング P.306
なお、現状画面からのデプロイでは、Podに入れるコンテナイメージは1つしか指定できなさそう。
kubectlでPodを作成する
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-containers
image: nginx:1.17.7
ports:
- containerPort: 80
ヘルスチェックの設定
ここでは、livenessProbe(Podが生きているか)のチェックに80番ポートアクセス、readinessProbe(サービスインの準備ができているか)にHttpGetで/にアクセスするように設定。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
spec:
replicas: 3
selector:
matchLabels:
app: sample-nginx
template:
metadata:
labels:
app: sample-nginx
spec:
containers:
- name: nginx-containers
image: nginx:1.17.7
ports:
- containerPort: 80
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 2
successThreshold: 1
tcpSocket:
port: 80
timeoutSeconds: 2
readinessProbe:
failureThreshold: 3
httpGet:
httpHeaders:
- name: Host
value: /
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 2
successThreshold: 2
timeoutSeconds: 2
ServiceDiscovery
ServiceDiscoveryではサービスリソースを作成。
Rancherからの設定
ターゲットの指定(IP/DNS/Workload/Selectorなど)、タイプ(ClustorIP/Nodeport/L4Blancer)、ポートマッピングなどを画面から行える。
kubectlからの設定
apiVersion: v1
kind: Service
metadata:
name: sample-service-nginx
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
selector:
workload.user.cattle.io/workloadselector: deployment-default-nginx
※selectorの内容は、Deploymentのyamlで確認。(RancherからDeploymentを作成した場合、おそらくdelployment-Namespace名-Workloads名になる)
参照:P.144
LoadBalancing
LoadBalancingではクラスタ外のロードバランサを利用したIngressの作成ができる。
(GCPの場合、Ingressを作成するとGCPのロードバランサが実態として作成される)
ドメインの指定、ルーティング、SSL/TLSの設定を行うことができる。(ドメインは自分で持ってなければxip.ioを使用することが可)
kubectlで作成
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: sample-service-nginx
servicePort: 8080
参照:P.183
参考
Author And Source
この問題について(RancherからKubernetesを覚える(Node/Pod/Service/LoadBalancer)), 我々は、より多くの情報をここで見つけました https://qiita.com/yamaneko_usg3/items/c45f034897d9c9a5bfb6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .