
ãããèªãã§ãããªããããããKubernetesã«ã€ããŠäœãèããããšãããã§ãããïŒããã§ãªãå Žåã¯ãã©ããã£ãŠããã«ãã©ãçããã®ã§ããïŒïŒããããKubernetesãšã¯æ£ç¢ºã«ã¯äœã§ããïŒããã¯ãå·¥æ¥çšã°ã¬ãŒãã®ã³ã³ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ãã§ããïŒãŸãã¯ãã¯ã©ãŠããã€ãã£ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãïŒãšã«ããããã¯ã©ãããæå³ã§ããïŒ
æ£çŽãªãšããã100ïŒ ç¢ºä¿¡ã¯ãããŸãããããããå éšãæãäžããŠãKubernetesã®å€ãã®æœè±¡åå±€ã®äžã§å®éã«äœãèµ·ãã£ãŠããã®ããèŠãã®ã¯è峿·±ããšæããŸããæ¥œãã¿ã®ããã«ãæå°éã®ãKubernetesã¯ã©ã¹ã¿ãŒããå®éã«ã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã ïŒããã¯ãKubernetes The Hard Wayãããã¯ããã«ç°¡åã§ããïŒ
KubernetesãLinuxãããã³ã³ã³ããã®åºæ¬çãªç¥èãããããšãåæãšããŠããŸããããã§èª¬æããããšã¯ãã¹ãŠã調æ»/ç ç©¶ã®ã¿ãç®çãšããŠããŸãããããæ¬çªç°å¢ã§å®è¡ããªãã§ãã ããã
æŠèŠæŠèŠ
Kubernetesã«ã¯å€ãã®ã³ã³ããŒãã³ããå«ãŸããŠããŸãããŠã£ãããã£ã¢ã«ãããšãã¢ãŒããã¯ãã£ã¯æ¬¡ã®ããã«ãªããŸãã

ããã«ã¯å°ãªããšã8ã€ã®ã³ã³ããŒãã³ãã瀺ãããŠããŸããããããã®ã»ãšãã©ã¯ç¡èŠããŸããKubernetesãšåççã«åŒã¶ããšãã§ããæå°ã®ãã®ã«ã¯ã3ã€ã®äž»èŠãªã³ã³ããŒãã³ããããããšãè¿°ã¹ãããšæããŸãã
- kubelet
- kube-apiserverïŒetcdã«äŸå-ãã®ããŒã¿ããŒã¹ïŒ
- ã³ã³ããã©ã³ã¿ã€ã ïŒãã®å Žåã¯DockerïŒ
ãããã®ããããã«ã€ããŠããã¥ã¡ã³ããäœãèšã£ãŠãããèŠãŠã¿ãŸãããïŒãã·ã¢èªãè±èªïŒãæåã«kubeletïŒ
ã¯ã©ã¹ã¿ãŒå ã®ãã¹ãŠã®ããŒãã§å®è¡ãããŠãããšãŒãžã§ã³ãã圌ã¯ãã³ã³ããããããå ã§å®è¡ãããŠããããšã確èªããŸãã
ç°¡åããã«èãããŸããäœã«ã€ããŠã®å®è¡æã®ã³ã³ããïŒã³ã³ããã»ã©ã³ã¿ã€ã ïŒïŒ
ã³ã³ããã©ã³ã¿ã€ã ã¯ãã³ã³ãããå®è¡ããããã«èšèšãããããã°ã©ã ã§ãã
éåžžã«æçã§ãããã ããDockerã«ç²ŸéããŠããå Žåã¯ãDockerã®æ©èœã«ã€ããŠåºæ¬çãªç¥èãå¿ èŠã§ãã ïŒã³ã³ããã©ã³ã¿ã€ã ãškubeletã®éã®æžå¿µã®åé¢ã®è©³çްã¯å®éã«ã¯éåžžã«åŸ®åŠãªã®ã§ãããã§ã¯èª¬æããŸãããïŒ
ãããŠãµãŒããŒAPIïŒ
APIãµãŒããŒ-KubernetesAPIã衚ãKubernetesããã·ã¥ããŒãã³ã³ããŒãã³ããAPIãµãŒããŒã¯Kubernetesããã·ã¥ããŒãã®ããã³ããšã³ãã§ã
ãKubernetesã§äœããããããšããã人ã¯ãçŽæ¥ãŸãã¯kubectlãä»ããŠAPIãšå¯Ÿè©±ããå¿ èŠããããŸãããããããKubernetes KubernetesïŒç§ãã¡å šå¡ãç¥ã£ãŠããŠæããŠããYAMLã®å±±ïŒïŒïŒãæ©èœããã€ã³ãã©ã¹ãã©ã¯ãã£ã«å€ããè³ïŒã®æ žå¿ã§ããAPIãæå°éã®æ§æã§ååšããå¿ èŠãããããšã¯æãããªããã§ãã
åææ¡ä»¶
- ã«ãŒãåãããLinuxä»®æ³ãŸãã¯ç©çãã·ã³ïŒä»®æ³ãã·ã³ã§Ubuntu 18.04ã䜿çšããŠããŸãïŒã
- ãããŠããããã¹ãŠã§ãïŒ
éå±ãªã€ã³ã¹ããŒã«
䜿çšãããã·ã³ã«Dockerãã€ã³ã¹ããŒã«ããå¿ èŠããããŸããïŒDockerãšã³ã³ãããŒãã©ã®ããã«æ©èœãããã«ã€ããŠã¯è©³ãã説æããŸãããèå³ãããå Žåã¯ããã°ãããèšäºããããŸãïŒãã§ã€ã³ã¹ããŒã«ããŸããã
apt
ïŒ
$ sudo apt install docker.io
$ sudo systemctl start docker
ãã®åŸãKubernetesãã€ããªãååŸããå¿ èŠããããŸããå®éããã¯ã©ã¹ã¿ãŒãã®æåã®èµ·åã«ã¯ã
kubelet
ä»ã®ãµãŒããŒã³ã³ããŒãã³ãã®èµ·åã«äœ¿çšã§ãããããå¿
èŠãªã ãã§ãkubelet
ãã¯ã©ã¹ã¿ãŒã皌åããåŸã«ã¯ã©ã¹ã¿ãŒãšå¯Ÿè©±ããããã«ãã䜿çšããŸãkubectl
ã
$ curl -L https://dl.k8s.io/v1.18.5/kubernetes-server-linux-amd64.tar.gz > server.tar.gz
$ tar xzvf server.tar.gz
$ cp kubernetes/server/bin/kubelet .
$ cp kubernetes/server/bin/kubectl .
$ ./kubelet --version
Kubernetes v1.18.5
èµ·åããã°ããã®å Žåã¯ã©ããªã
kubelet
ãŸããïŒ
$ ./kubelet
F0609 04:03:29.105194 4583 server.go:254] mkdir /var/lib/kubelet: permission denied
kubelet
ã«ãŒããšããŠå®è¡ãããŠããå¿
èŠããããŸãã圌ã¯ããŒãå
šäœã管çããå¿
èŠãããã®ã§ãããã¯ååã«è«ççã§ãããã®ãã©ã¡ãŒã¿ãèŠãŠã¿ãŸãããïŒ
$ ./kubelet -h
< , >
$ ./kubelet -h | wc -l
284
ãããŒãããããã®ãªãã·ã§ã³ããããŸãïŒå¹žããªããšã«ãå¿ èŠãªã®ã¯ãã®ãã¡ã®2ã€ã ãã§ãããããç§ãã¡ãèå³ãæã£ãŠãããã©ã¡ãŒã¿ã®1ã€ã§ãïŒ
--pod-manifest-path string
éçãããã®ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªãžã®ãã¹ããŸãã¯éçãããã説æãããã¡ã€ã«ãžã®ãã¹ãããªãªãã§å§ãŸããã¡ã€ã«ã¯ç¡èŠãããŸãã ïŒéæšå¥šïŒãã®ãã©ã¡ãŒã¿ãŒã¯ã-configãªãã·ã§ã³ãä»ããŠKubeletã«æž¡ãããæ§æãã¡ã€ã«ã§èšå®ããå¿ èŠããããŸãã詳现ã«ã€ããŠã¯ãkubernetes.io / docs / tasks / administer-cluster / kubelet-config-fileãåç §ããŠãã ãããïŒ
ãã®ãã©ã¡ãŒã¿ãŒã䜿çšãããšãéçã«å®è¡ã§ããŸããããã-KubernetesAPIãä»ããŠç®¡çãããªãããããéçãããã¯ãã£ãã«äœ¿çšãããŸããããã¯ã©ã¹ã¿ãŒããã°ããäžããã®ã«éåžžã«äŸ¿å©ã§ããããŸãã«ãããå¿ èŠã§ãããã®å€§ããªèŠåã¯ç¡èŠããŸãïŒç¹°ãè¿ããŸããããããæ¬çªç°å¢ã§å®è¡ããªãã§ãã ããïŒïŒãããŠãå®è¡ã§ãããã©ããã確èªããŸãã
ãŸããéçãããçšã®ãã£ã¬ã¯ããªãäœæããŠå®è¡ããŸã
kubelet
ã
$ mkdir pods
$ sudo ./kubelet --pod-manifest-path=pods
次ã«ãå¥ã®ã¿ãŒããã«/ tmuxãŠã£ã³ããŠ/å¥ã®å Žæã§ãããããããã§ã¹ããäœæããŸãã
$ cat <<EOF > pods/hello.yaml
apiVersion: v1
kind: Pod
metadata:
name: hello
spec:
containers:
- image: busybox
name: hello
command: ["echo", "hello world!"]
EOF
kubelet
ããã€ãã®èŠåãæžãå§ããŸããããäœãèµ·ãã£ãŠããªãããã§ããããããããã§ã¯ãããŸããïŒDockerãèŠãŠã¿ãŸãããã
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c8a35e26663 busybox "echo 'hello world!'" 36 seconds ago Exited (0) 36 seconds ago k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
68f670c3c85f k8s.gcr.io/pause:3.2 "/pause" 2 minutes ago Up 2 minutes k8s_POD_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_0
$ sudo docker logs k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
hello world!
kubelet
ããããããã§ã¹ããèªã¿ã仿§ã«åŸã£ãŠããã€ãã®ã³ã³ãããå®è¡ããããã«Dockerã«æç€ºããŸãããïŒãäžæåæ¢ãã³ã³ããã«èå³ãããå Žåãããã¯Kubernetesã®ãããã³ã°ã§ãã詳现ã«ã€ããŠã¯ãã®ããã°ãåç
§ããŠãã ãããïŒKubeletã¯busybox
ãæå®ãããã³ãã³ãã§ã³ã³ãããèµ·åããéçããããåé€ããããŸã§ç¡æéã«åèµ·åããŸãã
ããã§ãšãããããŸããã¿ãŒããã«ã«ããã¹ããåºåããããã®æãè€éãªæ¹æ³ã®1ã€ãæãã€ãããšããã§ãã
etcdãå®è¡ããŸã
ç§ãã¡ã®æçµçãªç®æšã¯KubernetesAPIãå®è¡ããããšã§ããããã®ããã«ã¯æåã«etcdãå®è¡ããå¿ èŠããããŸãã podsãã£ã¬ã¯ããªïŒããšãã°
pods/etcd.yaml
ïŒã«èšå®ãé
眮ããŠãæå°éã®etcdã¯ã©ã¹ã¿ãŒãéå§ããŸãããã
apiVersion: v1
kind: Pod
metadata:
name: etcd
namespace: kube-system
spec:
containers:
- name: etcd
command:
- etcd
- --data-dir=/var/lib/etcd
image: k8s.gcr.io/etcd:3.4.3-0
volumeMounts:
- mountPath: /var/lib/etcd
name: etcd-data
hostNetwork: true
volumes:
- hostPath:
path: /var/lib/etcd
type: DirectoryOrCreate
name: etcd-data
Kubernetesã䜿çšããããšãããå Žåã¯ããããã®YAMLãã¡ã€ã«ã«ç²ŸéããŠããå¿ èŠããããŸããããã§æ³šæãã¹ãç¹ã¯2ã€ã ãã§ããåèµ·ååŸã«etcdããŒã¿ãä¿å
ãããããã«ããã¹ããã©ã«ããŒ
/var/lib/etcd
ããããã«ããŠã³ãããŸããïŒãããè¡ããªããšãããããåèµ·åãããã³ã«ã¯ã©ã¹ã¿ãŒã®ç¶æ
ãæ¶å»ãããŸããããã¯ãæå°éã®Kubernetesã€ã³ã¹ããŒã«ã§ãåé¡ã«ãªããŸãïŒã
ã€ã³ã¹ããŒã«ããŸãã
hostNetwork: true
ããã®ãªãã·ã§ã³ã¯ãåœç¶ã®ããšãªããããããã®å
éšãããã¯ãŒã¯ã®ä»£ããã«ãã¹ããããã¯ãŒã¯ã䜿çšããããã«etcdãæ§æããŸãïŒããã«ãããAPIãµãŒããŒãetcdã¯ã©ã¹ã¿ãŒãèŠã€ãããããªããŸãïŒã
ç°¡åãªãã§ãã¯ã¯ãetcdãå®éã«localhostã§å®è¡ãããŠãããããŒã¿ããã£ã¹ã¯ã«ä¿åããŠããããšã瀺ããŠããŸãã
$ curl localhost:2379/version
{"etcdserver":"3.4.3","etcdcluster":"3.4.0"}
$ sudo tree /var/lib/etcd/
/var/lib/etcd/
âââ member
âââ snap
â âââ db
âââ wal
âââ 0.tmp
âââ 0000000000000000-0000000000000000.wal
APIãµãŒããŒã®èµ·å
Kubernetes APIServerã®èµ·åã¯ããã«ç°¡åã§ããæž¡ãå¿ èŠãããå¯äžã®ãã©ã¡ãŒã¿ãŒã¯
--etcd-servers
ãæåŸ
ã©ããã®åäœãããŸãã
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
spec:
containers:
- name: kube-apiserver
command:
- kube-apiserver
- --etcd-servers=http://127.0.0.1:2379
image: k8s.gcr.io/kube-apiserver:v1.18.5
hostNetwork: true
ãã®YAMLãã¡ã€ã«ããã£ã¬ã¯ããªã«é 眮ãã
pods
ãšãAPIãµãŒããŒãèµ·åããŸãããã«ãã«ããæ€èšŒã¯ãcurl
Kubernetes APIãå®å
šã«éããã¢ã¯ã»ã¹ã§ããŒã8080ã§ãªãã¹ã³ããŠããããšã瀺ããŠããŸã-èªèšŒã¯å¿
èŠãããŸããïŒ
$ curl localhost:8080/healthz
ok
$ curl localhost:8080/api/v1/pods
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/pods",
"resourceVersion": "59"
},
"items": []
}
ïŒç¹°ãè¿ãã«ãªããŸããããããæ¬çªç°å¢ã§å®è¡ããªãã§ãã ãããããã©ã«ãèšå®ãéåžžã«å®å šã§ãªãããšã«å°ãé©ããŠããŸãããããããããã¯éçºãšãã¹ãã容æã«ããããã ãšæããŸããïŒ
ãããŠãkubectlã¯ãè¿œå æ©èœãªãã§ãã®ãŸãŸåäœããŸããèšå®ïŒ
$ ./kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:47:41Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:39:24Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
$ ./kubectl get pod
No resources found in default namespace.
åé¡
ããããããå°ãæ·±ãæãäžãããšãäœããããŸããããªãããã§ãã
$ ./kubectl get pod -n kube-system
No resources found in kube-system namespace.
äœæããéçãããã¯ãªããªããŸãããå®éãkubeletããŒãã¯ãŸã£ãã衚瀺ãããŸããã
$ ./kubectl get nodes
No resources found in default namespace.
ã©ãããã®ïŒèŠããŠããããšæããŸãããæ°æ®µèœåã«ãéåžžã«åçŽãªã³ãã³ãã©ã€ã³ãã©ã¡ãŒã¿ã®ã»ããã§kubeletãéå§ãããããkubeletã¯APIãµãŒããŒã«æ¥ç¶ããŠãã®ç¶æ ãéç¥ããæ¹æ³ãç¥ããŸãããããã¥ã¡ã³ãã調ã¹ãåŸã察å¿ãããã©ã°ãèŠã€ãããŸãããAPIãµãŒããŒãžã®æ¥ç¶æ¹æ³ã瀺ã
--kubeconfig string
ãã¡ã€ã«ãžã®ãã¹
kubeconfig
ãååš--kubeconfig
ãããšAPIãµãŒããŒã¢ãŒãã--kubeconfig
æå¹ã«ãªããååšããªããšãªãã©ã€ã³ã¢ãŒããæå¹ã«ãªããŸãã
ãã®éãã£ãšãç¥ããªããã¡ã«ããªãã©ã€ã³ã¢ãŒããã§kubeletãå®è¡ããŠããŸãããïŒç§ãã¡ãããã³ãã£ãã¯ã ã£ãå Žåãkubeletã¹ã¿ã³ãã¢ãã³ã¢ãŒãããå®è¡å¯èœãªæå°ã®KubernetesããšèŠãªãããšãã§ããŸãããããã¯éåžžã«éå±ã§ãïŒããå®éã®ãæ§æãæ©èœãããã«ã¯ãkubeconfigãã¡ã€ã«ãkubeletã«æž¡ããŠãAPIãµãŒããŒãšã®éä¿¡æ¹æ³ãèªèãããå¿ èŠããããŸãã幞ããããã¯éåžžã«ç°¡åã§ãïŒèªèšŒãèšŒææžã«åé¡ããªãããïŒã
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://127.0.0.1:8080
name: mink8s
contexts:
- context:
cluster: mink8s
name: mink8s
current-context: mink8s
ããããšããŠä¿åã
kubeconfig.yaml
ãããã»ã¹kubelet
ã匷å¶çµäºããå¿
èŠãªãã©ã¡ãŒã¿ãŒã§åèµ·åããŸãã
$ sudo ./kubelet --pod-manifest-path=pods --kubeconfig=kubeconfig.yaml
ïŒã¡ãªã¿ã«ãkubeletãããŠã³ããŠãããšãã«curlã䜿çšããŠAPIã«ã¢ã¯ã»ã¹ããããšãããšãããã§ãæ©èœããããšãããããŸããKubeletã¯ãDockerã®ããã«ãããã®ã芪ãã§ã¯ãªãããå¶åŸ¡ããŒã¢ã³ãã®ãããªãã®ã§ãã kubeletã«ãã£ãŠç®¡çãããã³ã³ãããŒã¯ãkubeletããããã忢ãããŸã§å®è¡ãããŸããïŒ
æ°ååŸã
kubectl
äºæ³ã©ãããããããšããŒãã衚瀺ãããŸãã
$ ./kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default hello-mink8s 0/1 CrashLoopBackOff 261 21h
kube-system etcd-mink8s 1/1 Running 0 21h
kube-system kube-apiserver-mink8s 1/1 Running 0 21h
$ ./kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mink8s Ready <none> 21h v1.18.5 10.70.10.228 <none> Ubuntu 18.04.4 LTS 4.15.0-109-generic docker://19.3.6
ä»åã¯æ¬åœã«ããã§ãšãããããŸãïŒç§ã¯ãã§ã«ããã§ãšããšæããŸãïŒ-å®å šã«æ©èœããAPIã§åäœããæå°éã®Kubernetesãã¯ã©ã¹ã¿ãŒãããããŸãïŒ
äžã§å®è¡
ããã§ã¯ãAPIã®æ©èœãèŠãŠã¿ãŸããããnginxãããããå§ããŸãããïŒ
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
ããã§ãããªãè峿·±ããšã©ãŒãçºçããŸãã
$ ./kubectl apply -f nginx.yaml
Error from server (Forbidden): error when creating "nginx.yaml": pods "nginx" is
forbidden: error looking up service account default/default: serviceaccount
"default" not found
$ ./kubectl get serviceaccounts
No resources found in default namespace.
ããã§ã¯ãKubernetesç°å¢ãã©ãã»ã©ã²ã©ãäžå®å šã§ããããããããŸãâãµãŒãã¹ã¢ã«ãŠã³ãããããŸãããæåã§ãµãŒãã¹ã¢ã«ãŠã³ããäœæããŠå詊è¡ããäœãèµ·ããããèŠãŠã¿ãŸãããã
$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: default
EOS
serviceaccount/default created
$ ./kubectl apply -f nginx.yaml
Error from server (ServerTimeout): error when creating "nginx.yaml": No API
token found for service account "default", retry after the token is
automatically created and added to the service account
ãµãŒãã¹ã¢ã«ãŠã³ããæåã§äœæããå Žåã§ããèªèšŒããŒã¯ã³ã¯çæãããŸãããæå°éã®ãã¯ã©ã¹ã¿ãŒãã§å®éšãç¶ãããšãéåžžã¯èªåçã«çºçãã䟿å©ãªããšã®ã»ãšãã©ã倱ãããããšãããããŸããKubernetes APIãµãŒããŒã¯éåžžã«æå°éã§ãããã»ãšãã©ã®éãèªå調æŽã¯ããŸã å®è¡ãããŠããªãããŸããŸãªã³ã³ãããŒã©ãŒãããã¯ã°ã©ãŠã³ããžã§ãã§å®è¡ãããŸãã
ãã®åé¡ãåé¿ããã«
automountServiceAccountToken
ã¯ããµãŒãã¹ã¢ã«ãŠã³ãã®ãªãã·ã§ã³ãèšå®ããŸãïŒãšã«ãã䜿çšããå¿
èŠããªãããïŒã
$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: default
automountServiceAccountToken: false
EOS
serviceaccount/default configured
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 0/1 Pending 0 13m
ããããã¢ã³ããŒç»å ŽïŒãããå®éã«ã¯ãã¹ã±ãžã¥ãŒã©ãŒïŒã¹ã±ãžã¥ãŒã©ãŒïŒïŒKubernetesã®ãã1ã€ã®éèŠãªã³ã³ããŒãã³ãïŒããªããããèµ·åããŸãããç¹°ãè¿ãã«ãªããŸãããKubernetes APIã¯é©ãã»ã©ã°ãããŠããããšãããããŸããAPIã§ããããäœæãããšããããã¯ç»é²ãããŸãããå®è¡ããããŒããç¹å®ããããšã¯ããŸããã
ããããå®è¡ããã®ã«å®éã«ã¯ã¹ã±ãžã¥ãŒã©ã¯å¿ èŠãããŸããããã©ã¡ãŒã¿ã§ãããã§ã¹ãã«ããŒããæåã§è¿œå ã§ããŸã
nodeName
ïŒ
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
nodeName: mink8s
ïŒ
mink8s
ãã¹ãåã«çœ®ãæããŸããïŒåé€ããŠé©çšãããšãnginxãéå§ãããå
éšIPã¢ãã¬ã¹ããªãã¹ã³ããŠããããšãããããŸãã
$ ./kubectl delete pod nginx
pod "nginx" deleted
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 30s 172.17.0.2 mink8s <none> <none>
$ curl -s 172.17.0.2 | head -4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
ãããéã®ãããã¯ãŒã¯ãæ£ããæ©èœããŠããããšã確èªããããã«ãå¥ã®ãããããcurlãå®è¡ã§ããŸãã
$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: curl
spec:
containers:
- image: curlimages/curl
name: curl
command: ["curl", "172.17.0.2"]
nodeName: mink8s
EOS
pod/curl created
$ ./kubectl logs curl | head -6
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
ãã®ç°å¢ãæãäžããŠãäœãæ©èœããäœãæ©èœããªããã確èªããã®ã¯ãšãŠã楜ããããšã§ããConfigMapãšSecretã¯æåŸ ã©ããã«æ©èœããããšãããããŸããããServiceãšDeploymentã¯æ©èœããŸããã
æåïŒ
ãã®æçš¿ã¯å€§ãããªã£ãŠããã®ã§ãåå©ãçºè¡šããããããKubernetesããåŒã³åºãããã®å®è¡å¯èœãªæ§æã§ããããšã宣èšããŸããèŠçŽãããšã4ã€ã®ãã€ããªã5ã€ã®ã³ãã³ãã©ã€ã³ãã©ã¡ãŒã¿ãããã³ãã¡ããã©ã45è¡ã®YAMLïŒæšæºã§ã¯å€ããããŸããïŒ KubernetesïŒãããŠç§ãã¡ã¯ããããã®ããšãåããŠããŸãïŒ
- ãããã¯ãéåžžã®Kubernetes APIã䜿çšããŠç®¡çãããŸãïŒããã€ãã®ããã¯ããããŸãïŒ
- ãããªãã¯ã³ã³ããã€ã¡ãŒãžãã¢ããããŒãããã³ç®¡çã§ããŸã
- ãããã¯åç¶ããèªåçã«åèµ·åããŸã
- åäžããŒãå ã®ãããéã®ãããã¯ãŒã¯ã¯éåžžã«ããŸãæ©èœããŸã
- ConfigMapããªããžããªã®ç§å¯ã§æãç°¡åãªããŠã³ãã¯æåŸ ã©ããã«æ©èœããŸã
ããããKubernetesãæ¬åœã«äŸ¿å©ã«ãããã®ã®ã»ãšãã©ã¯ããŸã äžè¶³ããŠããŸããããšãã°ã次ã®ãšããã§ãã
- ããããã©ã³ããŒ
- èªèšŒ/æ¿èª
- è€æ°ã®ããŒã
- ãµãŒãã¹ãããã¯ãŒã¯
- ã¯ã©ã¹ã¿ãŒåãããå éšDNS
- ãµãŒãã¹ã¢ã«ãŠã³ããå±éãã¯ã©ãŠããããã€ããŒã®çµ±åãããã³Kubernetesããããããã®ä»ã®ã»ãšãã©ã®æ©èœã®ã³ã³ãããŒã©ãŒ
ã§ã¯ãå®éã«äœãåŸãã®ã§ãããããKubernetes APIã¯ãããèªäœã§åäœããå®éã«ã¯åãªãã³ã³ããèªååãã©ãããã©ãŒã ã§ããAPIã䜿çšããããŸããŸãªã³ã³ãããŒã©ãŒããªãã¬ãŒã¿ãŒã«å¯ŸããŠã¯æ©èœããŸãããèªååã®ããã®äžè²«ãããã¬ãŒã ã¯ãŒã¯ãæäŸããŸãã
ç¡æã®ãŠã§ãããŒã§ã³ãŒã¹ã®è©³çްãã芧ãã ããã
ç¶ããèªãïŒ
- sysadminãéçºè ããã¹ã¿ãŒãDevOpsã®å®è·µãåŠã¶å¿ èŠãããã®ã¯ãªãã§ããïŒ
- Thanos â Prometheus
- QA- GitLab GitLab Performance Tool
- Loki â , Prometheus
- DevOps