áá±á¬ááºážáá«ážááá¬áá¬ááŒááºááᯠáááºáááºážá
ááá·áºáá±á·ááœáẠááŒááºáááºáá²á·áá«áááºá
áááºá€á
á¬ááá¯áááºáá±áá«á Kubernetes á¡ááŒá±á¬ááºážáá
áºáá¯áá¯ááᯠáááºááŒá¬ážáá°ážáá±áááá·áºááẠ(ááá¯ááºáá«á á€áá±áá¬ááœáẠáááºáááºáá²á·ááá¯á·á¡áá¯á¶ážáááºáá²á·ááááºážá) ááá¯á·áá±á¬áº Kubernetes á¡ááá¡áá»áá¬áž á¡áááºáááºážá áá®
ááá¯ážááá¯ážáá¬ážáá¬ážááŒá±á¬áááẠáá»áœááºáá±á¬áº 100% ááá±áá»á¬áá«áá°ážá áá«áá±ááá·áº á¡ááœááºážááá¯ááºážááᯠá
á°ážá
ááºážáá±á·áá¬ááŒá®áž áá°á·áá²á· abstractions á¡ááœáŸá¬áá»á¬ážá
áœá¬á¡á±á¬ááºááŸá¬ Kubernetes ááŸá¬ ááááºááŒá
áºáá»ááºáá±áá¬ááœá±ááᯠááŒáá·áºááᬠá
áááºáááºá
á¬ážá
áá¬ááá¯á·áááºáá«áááºá ááá¯á·ááŒá±á¬áá·áº á¡áá»á±á¬áºááá±á¬áááºáááºááŒáá·áº á¡áááºážáááºáá»áŸáá¬áá±á¬ "Kubernetes á¡á
á¯á¡áá±áž" ááẠá¡ááŸááºáááẠáááºááá¯á·áááºáá¯á¶ááŸááááºááᯠááŒáá·áºááŒáá«á
áá¯á·á (áá«ááẠá¡áá»á¬ážááŒá®áž ááá¯ááœááºáá«áááá·áºáááºá
ááá·áºááœáẠKubernetesá Linux ááŸáá·áº containers áá»á¬ážááá¯ááºáᬠá¡ááŒá±áá¶ááá¯áá¯á ááŸááááºáᯠáá»áœááºáá±á¬áºáá°ááá«áááºá á€ááœááºáá»áœááºá¯ááºááá¯á·ááŒá±á¬ááá»áŸá¡áá¬á¡á¬ážáá¯á¶ážááẠáá¯áá±áá/áá±á·áá¬áá±ážáááºááœááºáá»ááºá¡ááœááºáá¬ááŒá
áºáááºá áááºážááá¯áá¯ááºáá¯ááºáá±ážááœááºáááá·áºáá«ááŸáá·áºá
áá±áá¯áá»á¡ááŒááº
Kubernetes ááœáẠá¡á
áááºá¡ááá¯ááºážáá»á¬ážá
áœá¬ áá«áááºáá«áááºá á¡á
á€áá±áá¬ááœáẠááŒááá¬ážáá±á¬ á¡áááºážáá¯á¶áž á¡á
áááºá¡ááá¯ááºáž ááŸá
áºáá¯ááŸááááºá ááá¯á·áá±á¬áº áááºážááá¯á·á¡áá»á¬ážá
á¯ááᯠáá»áœááºá¯ááºááá¯á· áá»á
áºáá»á°ááŸá¯áá«áááºá Kubernetes áᯠáá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºá
áœá¬ áá±á«áºáá±á«áºááá¯ááºáá±á¬ á¡áááá·áºáá¯á¶ážá¡áá¬ááẠá¡ááá á¡á
áááºá¡ááá¯ááºáž áá¯á¶ážáá¯áá«áááºááŒá±á¬ááºáž áá±á¬áºááŒááá¯áá«áááºá
- kubelet
- kube-apiserver (etcd áá±á«áºááœááºáá°áááºááẠ- áááºážááá±áá¬áá±á·á áº)
- container runtime (á€ááá á¹á ááœáẠDocker)
á
á¬ááœááºá
á¬áááºážáá
áºáá¯á
á®á áá¬ááœá±ááŒá±á¬áá¬ážáá² ááŒáá·áºáá¡á±á¬ááºá
á¡á á¯á¡áá±ážááŸá node áá áºáá¯á á®ááœáẠáá¯ááºáá±á¬ááºáá±áá±á¬ á¡á±ážáá»áá·áºá á¡áá¯ážáá²ááœáẠááœááºááááºáá¬áá»á¬áž áááºáááºáá±ááŒá±á¬ááºáž áá±áá»á¬á á±áááºá
ááá¯ážááŸááºážáá±á¬ááºáá²á·á¡áá¶á áá±á¬ container runtimes (ááœááºááááºáᬠruntime)?
container runtime ááẠcontainers ááᯠrun ááẠáá®ááá¯ááºážáá¯ááºáá¬ážáá±á¬ program áá áºáá¯ááŒá áºáááºá
á¡áááºážá¡áááá±ážáááºá áá«áá±ááá·áº Docker áá²á· áááºážááŸá®ážáááºááá¯áááºá á¡á²áá«á áá¬ááá¯áá¯ááºáá²ááá¯áá¬ááᯠáá±áá°áá» á áááºáá°ážááŸáááá·áºáá«áááºá (ááœááºááááºáᬠruntime ááŸáá·áº kubelet á¡ááŒá¬ážáá¬áááºááœá²áá±ááŸá¯á¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážáááºááááºáá±á¬á·á¡ááœááºááááºááœá±á·ááŒá®ážáá°ááá¯á·ááá¯á€áá±áá¬ááœááºáá»áœááºá¯ááºáááá·áºáá«á)
Ð API áá¬áá¬?
API áá¬áá¬ááẠKubernetes API ááᯠáá±á¬áºáá¯ááºáá±ážááá·áº Kubernetes ááááºážáá»á¯ááºááŸá¯ panel á¡á áááºá¡ááá¯ááºážááŒá áºáááºá API áá¬áá¬ááẠKubernetes ááááºážáá»á¯ááºááŸá¯ panel á client áááºááŒá áºáááºá
Kubernetes ááŸáá·áº áááºááá·áºá¡áá¬ááá¯áááᯠáá¯ááºáá±á¬ááºáá°ážáá°ááá¯ááºážááẠAPI ááŸáá·áº ááá¯ááºááá¯áẠááá¯á·ááá¯áẠkubectl ááŸáááá·áº á¡ááŒááºá¡ááŸáẠáá¯á¶á·ááŒááºááááºááŒá áºáááºá á€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á·á¡á¬ážáá¯á¶ážááááŒá®áž (?) ááŸá áºáááºáá±á¬ (?) áá±á¬ááºáá»á¬ážááᯠYAML áá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶á¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²áá±ážááá·áº Kubernetes Kubernetes á ááŸáá¯á¶ážáá¬ážááŒá áºáááºá áá»áœááºá¯ááºááá¯á·á á¡áááºážá¡áá»ááºážááœá²á·á ááºážááŸá¯ááœáẠAPI áá«ááŸáááá·áºáááºáᯠáááºááŸá¬ážáá«áááºá
áááºááŸááºáá»ááºáá»á¬áž
- root access áá«ááŸááá±á¬ Linux virtual ááá¯á·ááá¯áẠáá¯ááºááá¯ááºážááá¯ááºáá¬á áẠ(áá»áœááºá¯ááºááẠUbuntu 18.04 ááᯠvirtual machine ááœááºá¡áá¯á¶ážááŒá¯áá±áááº)á
- á¡á²áá«á¡á¬ážáá¯á¶ážáá²!
ááŒá®ážááœá±á·ááœááºáááºáááºááŒááºážá
áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áºá
ááºááœáẠDocker ááá¯ááá·áºááœááºážáááºááá¯á¡ááºáááºá ( Docker ááŸáá·áº containers áá»á¬áž áááºááá¯á·á¡áá¯ááºáá¯ááºáá¯á¶á¡ááŒá±á¬ááºáž á¡áá±ážá
áááºááᯠáá»áœááºá¯ááºááŒá±á¬áááºááá¯ááºáá«á áááºá
áááºáááºá
á¬ážáá«áá apt
:
$ sudo apt install docker.io
$ sudo systemctl start docker
ááá¯á·áá±á¬áẠKubernetes binaries ááᯠááá°ááẠááá¯á¡ááºáá«áááºá ááááºáá±á¬á·á áá»áœááºá¯ááºááá¯á·á âá¡á
á¯á¡áá±ážâ ááᯠáááŠážá
áááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·áᬠááá¯á¡ááºáá«áááºá 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
root á¡áá±áá²á· run ááá«áááºá Node áá
áºáá¯áá¯á¶ážááᯠá
á®áá¶ááá·áºááœá²ááẠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº áá¯áá¹áááááºáá«áááºá áááºážá parameters ááœá±ááá¯ááŒáá·áºááŒáá«á
áá¯á·á
$ ./kubelet -h
<ÑлОÑкПЌ ЌМПгП ÑÑÑПк, ÑÑÐŸÐ±Ñ ÑазЌеÑÑОÑÑ Ð·ÐŽÐµÑÑ>
$ ./kubelet -h | wc -l
284
á¡áá¯ážá ááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬á áá¶áá±á¬ááºážá áœá¬ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á·ááŸá áºáŠážáᬠááá¯á¡ááºáá«áááºá á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á·á áááºáááºá á¬ážáá±á¬ ááá·áºáááºáá±á¬ááºáá»á¬ážáá²á០áá áºáá¯ááŒá áºáááº-
--pod-manifest-path string
static pods áá»á¬ážá¡ááœáẠááá¯ááºáá»á¬ážáá«ááŸááá±á¬ áááºážááœáŸááºááá¯á· áááºážááŒá±á¬ááºáž ááá¯á·ááá¯áẠstatic pods áá»á¬ážááᯠáá±á¬áºááŒááá·áº ááá¯ááºáá®ááá¯á· áááºážááŒá±á¬ááºážá á¡á
ááºáá»á¬ážááŒáá·áº á
áááºáá±á¬ ááá¯ááºáá»á¬ážááᯠáá»á
áºáá»á°ááŸá¯áá¬ážáááºá (áááºááá¯ááºážáá¬ážáááº- --config ááœá±ážáá»ááºááŸá¯ááŸáá
áºááá·áº Kubelet ááá¯á·áá±ážááá¯á·áá±á¬ configuration file ááœáẠá€ááœá±ážáá»ááºááŸá¯ááᯠáááºááŸááºááá«áááºá áá±á¬ááºáááºá¡áá»ááºá¡áááºáá»á¬ážá¡ááœááºá ááŒáá·áºáá«á
á€ááœá±ážáá»ááºááŸá¯ááẠáá»áœááºá¯ááºááá¯á·ááᯠáááºáááºááẠááœáá·áºááŒá¯áááºá
ááááŠážá
áœá¬ áá»áœááºá¯ááºááá¯á·ááẠstatic pods á¡ááœáẠdirectory áá
áºáá¯ááá¯áááºáá®ážááŒá®áž run áá«áááºá kubelet
:
$ mkdir pods
$ sudo ./kubelet --pod-manifest-path=pods
ááá¯á·áá±á¬áẠá¡ááŒá¬áž terminal/tmux window/ áááºááá¯á·áááºááŒá áºá á±á áá»áœááºá¯ááºááá¯á·ááẠpod manifest áá áºáá¯ááᯠáááºáá®ážáá«áááº-
$ 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
pod manifest ááá¯áááºááŒá®áž Docker ááᯠáá»áœááºá¯ááºááá¯á·á áááºááŸááºáá»ááºáá»á¬ážá¡á ááœááºááááºáá¬á¡áá»áá¯á·ááᯠááœáá·áºááẠá¡áááá·áºáá±ážáá²á·áááºá (ááẠ"áá±áá¹ááááºááŒááºáž" ááœááºááááºáá¬á¡ááŒá±á¬ááºáž áááá»ááºáá«áá áááºážááẠKubernetes áááºááºááŒá
áºááẠ- ááŒáá·áºáá«á busybox
áááºááŸááºáá¬ážáá±á¬ command ááŒáá·áº static pod ááᯠááá»ááºááá»ááºáž áááºážááᯠáááºá¡ááá·áºá¡áááºáááŸá ááŒááºáááºá
áááºáá«áááºá
ááá¯áá·áºááá¯ááºááᯠáá¯ááºááŒá¯áá«á terminal ááá¯á· á á¬áá¬ážáá¯ááºááẠá¡ááŸá¯ááºáá¯á¶ážáááºážáááºážáá»á¬ážáá²á០áá áºáá¯ááᯠááá¯á០ááœá±á·ááŸááá¬áá«áááºá
áá áºááœáŸááºááŒááºážá áááºááá¯á·
áá»áœááºá¯ááºááá¯á·á á¡áá¹ááááááºážááá¯ááºááŸá¬ Kubernetes API ááᯠá¡áá¯á¶ážááŒá¯áááºááŒá
áºáááºá ááá¯á·áá±á¬áº ááá¯ááá¯á·áá¯ááºáá±á¬ááºááẠáá»áœááºá¯ááºááá¯á·ááẠáŠážá
áœá¬áá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá pods/etcd.yaml
):
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 ááá¯ááºáá»á¬ážááẠáááºááŸáá·áº áááºážááŸá®ážáá±ááá·áºáá«áááºá á€áá±áá¬ááœáẠááŸááºáá¬ážááá¯ááºáá±á¬ á¡áá»ááºááŸá áºáá»ááºáᬠááŸááá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠhost ááá¯ááºááœá²ááᯠáááºáááºááŒá®ážáá«ááŒá®á /var/lib/etcd
pod áá²ááœáẠetcd áá±áá¬ááᯠááŒááºáááºá
áááºááŒá®ážáá±á¬ááºááœáẠááááºážááááºážáá¬ážááá¯ááºá
á±ááẠ(áá«ááᯠááá¯ááºáá±á¬ááºáá«áá pod ááᯠááŒááºáááºá
áááºáá»áááºááá¯ááºážááœáẠá¡á
á¯á¡áá±ážá¡ááŒá±á¡áá±ááᯠáá»ááºáá
áºáááºááŒá
áºááŒá®ážá á¡áááºážáááºáá»áŸáᬠKubernetes áááºáááºááŸá¯á¡ááœááºááẠáá±á¬ááºážááœááºáááºááá¯ááºáá«)á
áááºáááºááŒá®ážáá«ááŒá®á hostNetwork: true
. pod á internal network á¡á
á¬áž host network ááá¯áá¯á¶ážááẠetcd ááᯠá¡á¶ááŒá
áá¬áááŸáá¡á±á¬áẠá
á®á
ááºáá±ážááẠ(áááºážááẠAPI áá¬áá¬á¡ááœáẠetcd á¡á
á¯á¡áá±ážááᯠááŸá¬ááœá±ááẠááá¯ááá¯ááœááºáá°á
á±áááá·áºáááº)á
ááá¯ážááŸááºážáá±á¬á á áºáá±ážáá»ááºáá áºáá¯ááœáẠetcd ááẠlocalhost ááœááºá¡ááŸááºááááºá¡áá¯ááºáá¯ááºáá±ááŒá®áž data ááᯠdisk ááá¯á·ááááºážáááºážááŒá±á¬ááºážááŒááááº
$ 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 API áá¬áá¬ááᯠáá¯ááºáá±á¬ááºááŒááºážááẠááá¯áááẠááœááºáá°áá«áááºá áá»á±á¬áºááŒááºáááºááá¯á¡ááºáá±á¬ áá
áºáá¯áááºážáá±á¬ ááá·áºáááºáá»ááºááŸá¬ --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 ááẠá¡ááŒáá·áºá¡áááœáá·áºáááºááá¯ááºáá±á¬ port 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 node ááᯠáá¯á¶ážááááœá±á·ááŸáááá«á
$ ./kubectl get nodes
No resources found in default namespace.
áá¬ááŒá áºáá¬áá²? ááœááºáá²á·áá±á¬á¡ááá¯ááºá¡áááºážáááºááá¯áááááá«áá áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºááá¯ážááŸááºážáá±á¬ command line parameters áá»á¬ážááŒáá·áº kubelet ááá¯á áááºáá²á·áááºá ááá¯á·ááŒá±á¬áá·áº kubelet ááẠAPI áá¬áá¬ááá¯áááºááá¯á·áááºááœááºáááŸááºážááááá²áááºážáá¡ááŒá±á¡áá±ááá¯á¡ááŒá±á¬ááºážááŒá¬ážáááºá á á¬ááœááºá á¬áááºážááá¯áá±á·áá¬ááŒá®ážáá±á¬ááºá áááºááá¯ááºáá¬á¡áá¶ááá¯áá»áœááºá¯ááºááá¯á·ááœá±á·ááŸááááº-
--kubeconfig string
ááá¯ááºááá¯á·ááœá¬ážáá¬áááºáž kubeconfig
API áá¬áá¬ááá¯á· áá»áááºáááºáááºážááᯠáááºááŸááºáá±ážáá±á¬á áááŸáááá¯ááºááŸá¯ --kubeconfig
API áá¬áá¬áá¯ááºááᯠááœáá·áºáááºá ááá¯ááºáá«á --kubeconfig
á¡á±á¬á·ááºááá¯ááºážáá¯ááºááᯠááœáá·áºáá±ážáááºá
áá«ááᯠáááááá¯ááºáá²á "á¡á±á¬á·ááºááá¯ááºážáá¯ááº" ááŸá¬ áá® Kubelet ááᯠáááºáááºáá±áá«áááºá (áá»áœááºá¯ááºááá¯á·ááẠpedantic ááŒá áºáá«áá áá»áœááºá¯ááºááá¯á·ááẠáá®ážááŒá¬áž kubelet ááᯠ"á¡áááá·áºáá¯á¶ážá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ Kubernetes" áᯠáááºáá±á¬ááºážáááºááá¯ááºáá±á¬áºáááºáž áááºážááẠá¡ááœááºááŒá®ážááœá±á·ááœááºáá±á¬ááºážáá±áááá·áºáááº)á "á¡á á áºá¡ááŸááº" ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠáá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠAPI áá¬áá¬ááᯠáááºááá¯á·ááŒá±á¬ááá¯ááááºááᯠááááŸáááẠkubeconfig ááá¯ááºááᯠkubelet ááá¯á· áá±ážááá¯á·ááẠááá¯á¡ááºáá«áááºá áá¶áá±á¬ááºážá áœá¬áá²á áááºážááẠá¡ááœááºááá¯ážááŸááºážáá«ááẠ(áá»áœááºá¯ááºááá¯á·ááœáẠá á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬áž ááá¯á·ááá¯áẠáááºááŸááºááŒá¿áá¬áá»á¬áž áááŸááá±á¬ááŒá±á¬áá·áº)
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 áá²á·ááá¯á· áááºážá pods áá»á¬ážá "ááá" ááá¯ááºáá«á áááºážááẠ"ááááºážáá»á¯ááºááŸá¯" ááŸáá·áºááá¯áá°áá«áááºá daemoná" kubelet á០á á®áá¶ááá·áºááœá²áá±á¬ ááœááºááááºáá¬áá»á¬ážááẠkubelet áááºááá·áºááœá¬ážáááºá¡áá áááºáááºáááºáááºáá±áááºááŒá áºáá«áááºá)
áááá
áºá¡áááºážáááºá¡ááœááºáž kubectl
áá»áœááºá¯ááºááá¯á·áá»áŸá±á¬áºááá·áºáá¬ážááá·áºá¡ááá¯ááºáž pods ááŸáá·áº node áá»á¬ážááᯠááŒáááá·áºáááº-
$ ./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 pod áá²á· á ááá¯ááºáá¡á±á¬ááºá
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
áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯á¡áá±á¬áá·áºááᯠááá¯ááºááá¯ááºáááºáá®ážááá·áºá¡áá«ááœááºáááºá á¡áá±á¬ááºá¡áá¬ážá áá á áºááŒááºáž ááá¯áááºááᯠááá¯ááºáá±ážáá«á áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á minimalistic "cluster" ááᯠáááºáááºá ááºážáááºáá±áá»áááºááœáẠá¡áá»á¬ážá¡á¬ážááŒáá·áº á¡áá¯á¶ážáááºáá±á¬ á¡áá¬á¡áá»á¬ážá á¯ááẠá¡ááá¯á¡áá»á±á¬áẠáá»á±á¬ááºááœááºááœá¬ážáááºááᯠááœá±á·ááŸáááááºááŒá áºáááºá Kubernetes API áá¬áá¬ááẠáá±ážáá¶áá±á¬ áá¯ááºááááºážááŒááºážááŸáá·áº á¡ááá¯á¡áá»á±á¬ááºááœá²á·á ááºážááŸá¯á¡áá»á¬ážá á¯ááᯠááá¯ááºáá±á¬ááºááá±ážááá·áº ááááºážáá»á¯ááºáááááá¬áá»á¬ážááŸáá·áº áá±á¬ááºáá¶á¡áá¯ááºáá»á¬ážááœáẠááŒá áºáá±á«áºáá±áááŒáá·áº 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
áá±á¬ááºáá¯á¶ážáá±á¬á· á¡áá¯ážáá±á«áºáá¬áá«ááŒá®á áá«áá±ááá·áº ááááºáá±á¬á· á¡á²áá«á áá»áœááºáá±á¬áºááá¯á·ááŸá¬ áááŸáááá¯á· áááŒá
áºáá°ážá
á¡ááŸááºááááºáá±á¬á· pod áá
áºáá¯ááᯠrun ááá¯á· á¡áá»áááºááá¬ážááœá²áá±á
áᬠáááá¯áá«áá°ážá áá«áá¬áá®áá¬ááŸá manifest ááœáẠnode áá
áºáá¯ááᯠááá¯ááºááá¯ááºááá·áºááá¯ááºáááºá nodeName
:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
nodeName: mink8s
(á¡á
á¬ážááá¯ážáá«á mink8s
node áá¡áááºááá¯á·á) áá»ááºááŒá®ážá¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬ááºá 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>
pods áá»á¬ážááŒá¬áž ááœááºááẠááŸááºáááºá áœá¬ á¡áá¯ááºáá¯ááºááŒá±á¬ááºáž áá±áá»á¬á á±áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬áž pod á០curl ááᯠrun ááá¯ááºáááº-
$ 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 ááẠáá»áŸá±á¬áºááá·áºáá¬ážááá·áºá¡ááá¯ááºáž á¡áá¯ááºáá¯ááºáááºááᯠáá»áœááºá¯ááºááœá±á·ááŸááá±á¬áºáááºáž áááºáá±á¬ááºááŸá¯ááŸáá·áº ááŒáá·áºáá»ááºááŒááºáž áááŒá¯áá¯ááºááá¯ááºáá«á
á¡á±á¬ááºááŒááº
á€ááá¯á·á áºááẠááŸááºáá»á¬ážáá¬áááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááẠá¡á±á¬ááºááœá²áá¶ááŒá®áž áááºážááẠ"Kubernetes áá¯áá±á«áºááá¯ááá¯ááºáá±á¬ á¡áá»á¯á¶ážáááºáá±á¬ ááœá²á·á ááºážááŸá¯áá áºáá¯ááŒá áºáááºá" á¡ááá¯áá»á¯á¶á·ááŒá±á¬ááá»áŸááº- binaries áá±ážáá¯á command line parameters áá«ážáá¯ááŸáá·áº YAML á "áá¬" 45 ááá¯ááºáž (ááá¯ááºáá« Kubernetes á á¶ááŸá¯ááºážáá»á¬ážá¡ááá¯ááºáž) áá»áœááºá¯ááºááá¯á·ááœáẠáá¯ááºáá±á¬ááºáá±ááá·áºá¡áᬠá¡áááºážáááºááŸááááºá
- Pods áá»á¬ážááᯠáá¯á¶ááŸáẠKubernetes API (áááºááºá¡áááºážáááºááŒáá·áº) á á®áá¶ááá·áºááœá²áááº
- á¡áá»á¬ážáá°ááŸá¬ áá¯á¶áá»á¬ážááᯠá¡ááºáá¯ááºáá¯ááºááŒá®áž á á®áá¶ááá¯ááºáá«áááºá
- Pods áá»á¬ážááẠá¡áááºááŸááºáá±ááŒá®áž á¡ááá¯á¡áá»á±á¬áẠááŒááºáááºá áááºáááºá
- áá°áá®áá±á¬ node á¡ááœááºáž pods áá»á¬ážááŒá¬áž ááœááºáááºáá»áááºáááºááŒááºážááŸá¬ á¡áá±á¬áºáá±áž áá±á¬ááºážááœááºáá«áááºá
- ConfigMapá áá»áŸáá¯á·ááŸááºáá»ááºááŸáá·áº ááá¯ážááŸááºážáá±á¬ ááá¯ááŸá±á¬ááºááŸá¯ áááºáááºááŒááºážááẠáá»áŸá±á¬áºááá·áºáá¬ážááá·áºá¡ááá¯ááºáž á¡áá¯ááºááŒá áºáááºá
ááá¯á·áá±á¬áº Kubernetes á¡ááŸááºááááºá¡áá¯á¶ážáááºá á±ááá·áºá¡áᬠá¡áá»á¬ážá¡ááŒá¬ážááŸá¬á
- Pod Scheduler
- á á áºááŸááºááŒá±á¬ááºáž/ááœáá·áºááŒá¯áá»ááº
- áá¯á¶ááŸááºáá»á¬ážá áœá¬
- áááºáá±á¬ááºááŸá¯ááœááºáááº
- Clustered internal DNS
- áááºáá±á¬ááºááŸá¯á¡áá±á¬áá·áºáá»á¬ážá á¡áá¯á¶ážáá»ááŸá¯áá»á¬ážá cloud áááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážááŸáá·áº áá±á«ááºážá ááºážááŒááºážá¡ááœáẠKubernetes áááºáá±á¬ááºáá¬áá±ážááá·áº á¡ááŒá¬ážáá±á¬ á¡áá»áá¯ážáá»á±ážáá°ážá¡áá»á¬ážá á¯
áá«ááᯠáá»áœááºáá±á¬áºááá¯á· ááááºááá²á·áá¬á áá¬áá²á Kubernetes API ááẠáá°á·áá¬áá¬áá°áááºáááºáá±áááºááŸá¬ á¡ááŸááºááááºá¡ááœáẠááááºáá±á¬ááºážáá áºáá¯áá¬ááŒá áºáááºá ááœááºááááºáá¬á¡ááá¯á¡áá»á±á¬ááºá áá áº. áááºážááẠáá»á¬ážá áœá¬ááá¯ááºáá±á¬ááºáá« - API ááᯠá¡áá¯á¶ážááŒá¯ááá·áº ááááºážáá»á¯ááºáá°ááŸáá·áº á¡á±á¬áºááá±áᬠá¡áá»áá¯ážáá»áá¯ážá¡ááœáẠá¡áá¯ááºááŒá áºááẠ- ááá¯á·áá±á¬áº áááºážááẠá¡ááá¯á¡áá»á±á¬ááºá áá áºá¡ááœáẠáááááºáááºážááŸááá±á¬ áááºáááºážáá»ááºááᯠáá±ážáá±á¬ááºáááºá
ááá¯ááŒá®ážáááºáá«:
á áá áºá á®áá¶ááá·áºááœá²áá°áá»á¬ážá áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážááŸáá·áº á ááºážáááºáá°áá»á¬ážááẠDevOps á¡áá±á·á¡áá»áá·áºáá»á¬ážááᯠá¡áááºááŒá±á¬áá·áº áá±á·áá¬ááá·áºááááºážá Thanos - Scalable Prometheus GitLab QA á¡ááœá²á·ááẠGitLab Performance Tool ááá¯á¡áá¯á¶ážááŒá¯áá¯á¶ Loki - Prometheus áá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáááºážá á¯áá±á¬ááºážááŒááºážá DevOps ááááá áºáááº
source: www.habr.com