这是indexloc提供的服务,不要输入任何密码
Skip to content

hiroygo/kubernetes-practical-guide

Repository files navigation

kubernetes-practical-guide

kubectl get

  • -l でラベル指定できる
$ kubectl get po -l app=db

kubectl create

% kubectl create deployment nginx --image nginx
deployment.apps/nginx created
% kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           11s
% kubectl expose --type NodePort --port 80 deployment nginx
service/nginx exposed
% minikube service nginx

kubectl run(ワンショットな pod 起動)

% kubectl run pingtest -i --rm --image k8spracticalguide/busybox:1.28 --restart=Never -- ping -c 1 172.17.0.6
PING 172.17.0.6 (172.17.0.6): 56 data bytes
64 bytes from 172.17.0.6: seq=0 ttl=64 time=0.119 ms

--- 172.17.0.6 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.119/0.119/0.119 ms
pod "pingtest" deleted

kubectl apply -f

% kubectl apply -f mattermost-deploy.yaml

--dry-run

deployment, confingmap, secret

% kubectl create deploy mattermost --image k8spracticalguide/mattermost:4.10.2 -o yaml --dry-run=client > mattermost-deploy.yaml
% kubectl create deploy db --image k8spracticalguide/mysql:5.7.22 -o yaml --dry-run=client > db-deploy.yaml
% kubectl create cm common-env -o yaml --dry-run=client --from-literal MYSQL_USER=myuser --from-literal MYSQL_PASSWORD=mypassword --from-literal MYSQL_DATABASE=mattermost > cm.yaml
% kubectl create secret generic common-env -o yaml --dry-run=client --from-literal MYSQL_ROOT_PASSWORD=rootpassword --from-literal MYSQL_PASSWORD=mypassword > secret.yaml

clusterip, externalname(クラスタ内での名前解決)

  • clusterip はクラスタ内サービスの名前解決をする。spec.clusterIP を None にすると ClusterIP が付与されず pod の IP が直接返る(Headless Service)
% kubectl create svc clusterip mattermost-db --tcp 3306 -o yaml --dry-run=client > db-service.yaml
  • externalname はクラスタ内からクラスタ外のサービスの名前解決をする。ExternalName の CLUSTER-IP は付与されない
% kubectl create svc externalname ext-mattermost-db --external-name www.google.com
% kubectl get svc
NAME                TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)    AGE
ext-mattermost-db   ExternalName   <none>       www.google.com   <none>     98s
kubernetes          ClusterIP      10.96.0.1    <none>           443/TCP    30d
mattermost-db       ClusterIP      10.98.57.1   <none>           3306/TCP   25m

nodeport, ingress, loadbalancer(アプリケーションを外部に公開する)

  • nodeport は CLUSTER-IP が使われているので、クラスタ内から名前解決できる
# expose だと mattermost という deployment が実際に存在しないとエラーになる
% kubectl expose --type NodePort --port 8065 deploy mattermost
% kubectl get svc mattermost -o wide
NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE   SELECTOR
mattermost   NodePort   10.102.79.83   <none>        8065:32427/TCP   74s   app=mattermost
% kubectl run nslookup -i --rm --image busybox --restart=Never -- nslookup mattermost
Server:         10.96.0.10
Address:        10.96.0.10:53

Name:   mattermost.default.svc.cluster.local
Address: 10.102.79.83
% minikube ip
192.168.49.2
# https://minikube.sigs.k8s.io/docs/handbook/host-access/
% minikube ssh
docker@minikube:~$ curl 192.168.49.2:32427 > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3261  100  3261    0     0  3184k      0 --:--:-- --:--:-- --:--:-- 3184k
# create だと mattermost という deployment が実際に存在しなくても OK
% kubectl create service nodeport test --tcp 8080 --node-port 12345 --dry-run=client
  • ingress
% kubectl create ingress mattermost --rule=chat.foo.nip.io/=mattermost:8065 --dry-run=client -o=yaml
% minikube ssh
docker@minikube:~$ curl --resolve chat.foo.nip.io:80:127.0.0.1 chat.foo.nip.io > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3261  100  3261    0     0  1592k      0 --:--:-- --:--:-- --:--:-- 1592k
  • loadbalancer
% kubectl expose deployment mattermost --port 8065 --type=LoadBalancer --name=lb
% kubectl get svc
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes      ClusterIP      10.96.0.1        <none>        443/TCP          32d
lb              LoadBalancer   10.106.202.206   <pending>     8065:31786/TCP   10s
mattermost      NodePort       10.102.79.83     <none>        8065:32427/TCP   2d1h
mattermost-db   ClusterIP      10.98.57.1       <none>        3306/TCP         2d2h
# 以下は別のターミナルで実行する
 % minikube tunnel
🏃  Starting tunnel for service lb.
% kubectl get svc
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes      ClusterIP      10.96.0.1        <none>        443/TCP          32d
lb              LoadBalancer   10.106.202.206   127.0.0.1     8065:31786/TCP   2m14s
mattermost      NodePort       10.102.79.83     <none>        8065:32427/TCP   2d1h
mattermost-db   ClusterIP      10.98.57.1       <none>        3306/TCP         2d2h
% curl 127.0.0.1:8065 > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3261  100  3261    0     0   297k      0 --:--:-- --:--:-- --:--:-- 1061k
  • loadbalancer の挙動
# 別のターミナルで minikube tunnel している
% kubectl get svc lb
NAME   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
lb     LoadBalancer   10.106.202.206   127.0.0.1     8065:31786/TCP   17h
# クラスタ内から CLUSTER-IP へはアクセスできる
% kubectl run wgettest -i --rm --image k8spracticalguide/busybox:1.28 --restart=Never -- wget 10.106.202.206:8065
Connecting to 10.106.202.206:8065 (10.106.202.206:8065)
index.html           100% |*******************************|  3261   0:00:00 ETA
# loadbalancer は NodePort を使ってノードのポートを解放しているので minikube からアクセスできる
docker@minikube:~$ curl localhost:31786 > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3261  100  3261    0     0  1592k      0 --:--:-- --:--:-- --:--:-- 3184k
# 自分のマシンからアクセスしてみる
# minikube の LoadBalancer(localhost:8065) > NodePort(192.168.49.2:31786) > ClusterIP(10.106.202.206:8065) > Pod(172.17.0.6:8065) の順で通る
% minikube ip
192.168.49.2
% kubectl get po -o=wide
NAME                          READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
db-799494d969-4vwwl           1/1     Running   0          2d20h   172.17.0.6   minikube   <none>           <none>
mattermost-6d77868f4c-hqr8n   1/1     Running   0          2d19h   172.17.0.7   minikube   <none>           <none>
% curl localhost:8065 > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3261  100  3261    0     0   269k      0 --:--:-- --:--:-- --:--:--  796k

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published