แกแขแแขแแแก แแแ แแแแแ แแแแแแแแ แแฃแ แกแแก แแแฌแงแแแแก แฌแแแ แแฆแแก
แแฃ แแแแก แแแแฎแฃแแแแ, แแแแแ แแกแแแแแแ แ แแฆแแช Kubernetes-แแก แจแแกแแฎแแ (แแ แแฃ แแ แ, แ แแแแ แแแฎแแแแ แแฅ?) แแแแ แแ แแแแแ แแขแฃแแแ แ แ แแ แแก Kubernetes? แแก
แแแ แแแแ แแแแฎแ แแ, 100%-แแ แแ แแแ แแแ แฌแแฃแแแแฃแแ. แแแแ แแ แแคแแฅแ แแ, แกแแแแขแแ แแกแแ แจแแแแแแแจแ แฉแแฆแ แแแแแแ แแ แแแแก แแแแแฎแแ, แแฃ แ แ แฎแแแแ แ แแแแฃแ แแ แแฃแแแ แแแขแจแ แแแกแ แแแกแขแ แแฅแชแแแแแก แแ แแแแแ แคแแแแก แฅแแแจ. แแกแ แ แแ, แฃแแ แแแแ แแแกแแ แแแแแ, แแแแแ แจแแแฎแแแแ แ แแแแฃแ แแ แ แแแแ แแแแแแงแฃแ แแแ แแแแแแแแฃแ แ โแแฃแแแ แแแขแแก แแแแกแขแแ แโ. (แแก แแแแ แแ แฃแคแ แ แแแแแแ แแฅแแแแ, แแแแ แ
แแคแแฅแ แแ, แแฅแแแ แแแฅแแ Kubernetes, Linux แแ แแแแขแแแแแ แแแแก แกแแแแแแกแ แชแแแแ. แงแแแแแคแแ แ, แ แแแแช แแฅ แแกแแฃแแ แแแ, แแฎแแแแ แแแแแแแแ/แกแแกแฌแแแแ แแแแแแแแกแแแแกแแ, แแฃ แแแแแแขแแแ แแแ แฌแแ แแแแแแจแ!
แแแแแฎแแแแก
Kubernetes แจแแแชแแแก แแแแ แแแแแแแแแขแก. แฒแแฎแแแแแ
แแฅ แแแฉแแแแแแแ แแแแแแฃแ แ แแ แแแแแแแแแขแ, แแแแ แแ แฉแแแ แฃแแฃแแแแแแแงแแคแ แแแ แฃแแแขแแกแแแแก. แแแแแ แแแแแแชแฎแแแ, แ แแ แแแแแแแแฃแ แ แ แแ, แ แแกแแช แแแแแแ แฃแแแ แจแแแซแแแแ แแฃแฌแแแแ Kubernetes, แจแแแแแแ แกแแแ แซแแ แแแแแ แแแแแแแแแขแแกแแแ:
- แแฃแแแแแขแ
- kube-apiserver (แ แแแแแแช แแแแแแแแแแฃแแแ etcd-แแ - แแแกแ แแแแแชแแแแ แแแแ)
- แแแแขแแแแแ แแก แแฃแจแแแแแก แแ แ (แแ แจแแแแฎแแแแแจแ Docker)
แแแแฎแแ, แ แแก แแแแแแก แแแแฃแแแแขแแชแแ แแแแแแฃแ แแแแแแแแ (
แแแแแขแ, แ แแแแแแช แแฃแจแแแแก แแแแกแขแแ แแก แแแแแแฃแ แแแแแซแแ. แแก แแแ แฌแแฃแแแแแ, แ แแ แแแแขแแแแแ แแแ แแแจแแแแฃแแแ แแแแจแ.
แกแแแแแ แแกแแ แแแ แขแแแแ แแฆแแ แก. แ แแช แจแแแฎแแแ แแแแขแแแแแ แแก แแฃแจแแแแแก แแแแแแ (แแแแขแแแแแ แแก แแฃแจแแแแแก แแ แ)?
แแแแขแแแแแ แแก แแแจแแแแแก แแ แ แแ แแก แแ แแแ แแแ, แ แแแแแแช แจแแฅแแแแแแ แแแแขแแแแแ แแแแก แแแกแแจแแแแแ.
แซแแแแแ แแแคแแ แแแขแแฃแแ. แแแแ แแ แแฃ แแฅแแแ แแชแแแแ Docker-แก, แแแจแแ แฃแแแ แแฅแแแแแ แแแแแแ แฌแแ แแแแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแก แแแแแแแก แแแ. (แแแแขแแแแแ แแก แแฃแจแแแแแก แแ แแกแ แแ แแฃแแแแขแก แจแแ แแก แแแกแฃแฎแแกแแแแแแแแแแแก แแแแแฏแแแแก แแแขแแแแแ, แคแแฅแขแแแ แแแแ, แกแแแแแแ แแแฎแแแฌแแแแ แแ แแแ แแฅ แแ แจแแแแ.)
ะ API แกแแ แแแ แ?
API แกแแ แแแ แ แแ แแก Kubernetes แแแ แแแแก แแแแแแแก แแแแแแแแแขแ, แ แแแแแแช แแแแแแก Kubernetes API-แก. API แกแแ แแแ แ แแ แแก Kubernetes แแแ แแแแก แแแแแแแก แแแแแแขแแก แแฎแแ แ
แแแแแกแแแแ แก, แแแกแแช แแแแกแแ แ แแแแ แแแฃแแแแแแแ Kubernetes-แแแ, แแแฃแฌแแ แแแขแแ แแฅแชแแ API-แกแแแ แแแ แแแแแ แแ kubectl-แแก แแแจแแแแแแ. แแก แแ แแก แแก แแฃแแ, แ แแช แแฅแชแแแก Kubernetes Kubernetes - แขแแแแก, แ แแแแแแช แแฅแชแแแก YAML-แแก แแแแแก, แ แแแแแแแช แงแแแแแ แแแชแแ แแ แแแแงแแแ แก (?) แกแแแฃแจแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแ. แแจแแแ แแ, แ แแ API แฃแแแ แแงแแก แฌแแ แแแแแแแแแ แฉแแแแก แแแแแแแแฃแ แแแแคแแแฃแ แแชแแแจแ.
แฌแแแแแแ แแแแแ
- Linux แแแ แขแฃแแแฃแ แ แแ แคแแแแแฃแ แ แแแแฅแแแ root แฌแแแแแแ (แแแ แขแฃแแแฃแ แแแแฅแแแแแ แแแงแแแแ 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
แฃแแแ แแแฃแจแแแก แ แแแแ แช root. แกแแแแแแ แแแแแแฃแ แแ, แ แแแแแ แแแก แแแแแ แแแแแซแแก แแแ แแแ แกแญแแ แแแแ. แแแแแ แจแแแฎแแแแ แแแก แแแ แแแแขแ แแแก:
$ ./kubelet -h
<ัะปะธัะบะพะผ ะผะฝะพะณะพ ัััะพะบ, ััะพะฑั ัะฐะทะผะตััะธัั ะทะดะตัั>
$ ./kubelet -h | wc -l
284
Wow, แแแแแแ แแแ แแแแขแ! แกแแแแแแแแ แแ, แฉแแแ แแฎแแแแ แ แแแแแแแแ แแแแแแแ แแแญแแ แแแแ. แแฅ แแ แแก แแ แ-แแ แแ แแแ แแแแขแ แ, แ แแแแแแช แแแแแแขแแ แแกแแแก:
--pod-manifest-path string
แแแ แแแ แแฅแขแแ แแแจแ, แ แแแแแแช แจแแแชแแแก แคแแแแแแก แกแขแแขแแแฃแ แ แแแแแแแกแแแแก, แแ แแแ แคแแแแแกแแแแ, แ แแแแแแช แแฆแฌแแ แก แกแขแแขแแแฃแ แ แแแแแแก. แฌแแ แขแแแแแแ แแแฌแงแแแฃแแ แคแแแแแแ แแแแแ แแ แแแฃแแแ. (แแแซแแแแแแฃแแแ: แแก แแแ แแแแขแ แ แฃแแแ แแงแแก แแแงแแแแแฃแแ แแแแคแแแฃแ แแชแแแก แคแแแแจแ, แ แแแแแแช แแแแแแชแแแ Kubelet-แก --config แแคแชแแแก แแแจแแแแแแ. แแแแแขแแแแแ แแแคแแ แแแชแแแกแแแแก แแฎ.
แแก แแแ แแแแขแ แ แแแจแแแแแก แกแแจแฃแแแแแแก แแแแซแแแแก
แแแ แแแ แ แแแจแ แจแแแฅแแแแ แแแ แแฅแขแแ แแแก แกแขแแขแแแฃแ แ แแแแแแแกแแแแก แแ แแแแฃแจแแแ kubelet
:
$ mkdir pods
$ sudo ./kubelet --pod-manifest-path=pods
แจแแแแแ, แกแฎแแ แขแแ แแแแแแจแ/tmux แคแแแฏแแ แแจแ/แ แแช แแ แฃแแแ แแงแแก, แฉแแแ แจแแแฅแแแแ 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
แแฌแงแแแก แ แแฆแแช แแแคแ แแฎแแแแแแแแก แฌแแ แแก แแ แแแแฅแแก แแ แแคแแ แ แฎแแแแ. แแแแ แแ แแก แแกแ แแ แแ แแก! แแแแแ แแแแแแฎแแแแ แแแแแ แก:
$ 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
แแ แฌแแแแแแแฎแ แแแ แแแแแคแแกแขแ แแ แแแแแ แก แแแแแชแ แแ แซแแแแแ แแแฃแจแแ แ แแแแแแแแ แแแแขแแแแแ แ แฉแแแแ แกแแแชแแคแแแแชแแแแแก แแแฎแแแแแ. (แแฃ แแแแแขแแ แแกแแแ "แแแฃแแแก" แแแแขแแแแแ แ, แแก แแ แแก Kubernetes-แแก แฐแแแ - แแฎ. busybox
แแแแแแแแฃแแ แแ แซแแแแแแ แแ แแแแแแขแแแ แแแแ แแแแฃแกแแแฆแแ แแแ แแแแแ, แกแแแแ แกแขแแขแแแฃแ แ แแแแ แแ แฌแแแจแแแแ.
แแแฃแแแชแแ แกแแแฃแแแ แแแแก. แฉแแแ แแฎแแแฎแแ แแแแแคแแฅแ แแ แแ แ-แแ แแ แงแแแแแแ แแแแแแแแแแแ แแแ แขแแ แแแแแแจแ แขแแฅแกแขแแก แแแแแกแแขแแแแ!
แแแจแแแแ แแ แ.แจ
แฉแแแแ แกแแแแแแ แแแแแแแ 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 แคแแแแแแ แแฅแแแแแแแก แแแชแแแแ แฃแแแ แแงแแก. แแฅ แแฎแแแแ แแ แ แแฃแแฅแขแแ แแแกแแแแแแแกแฌแแแแแแแ:
แฉแแแ แแแแแแแแขแแแแ แฐแแกแขแแก แกแแฅแแฆแแแแ /var/lib/etcd
แแแแจแ แแกแ, แ แแ etcd แแแแแชแแแแแ แจแแแแฎแฃแแ แแงแแก แแแแแขแแแ แแแแก แจแแแแแ (แแฃ แแก แแ แแแแแแแแฃแแ, แแแแกแขแแ แแก แแแแแแแ แแแแ แฌแแแจแแแแ แงแแแแ แฏแแ แแ, แ แแแแกแแช pod แแแแแแขแแแ แแแแ, แ แแช แแ แแฅแแแแ แแแ แแ แแฃแแแแช แแแแแแแแฃแ แ Kubernetes แแแกแขแแแแชแแแกแแแแก).
แฉแแแ แแแแแงแแแแ hostNetwork: true
. แแก แแแ แแแแขแ แ, แแแกแแแแแ แ แแ แแ แแก, แแแแแคแแแฃแ แแ แแแก etcd-แก, แ แแแ แแแแแแงแแแแก แแแกแแแแซแแแ แฅแกแแแ pod-แแก แจแแแ แฅแกแแแแก แแแชแแแแ (แแก แแแฃแแแแแแแแก API แกแแ แแแ แก etcd แแแแกแขแแ แแก แแแแแแก).
แแแ แขแแแ แจแแแแฌแแแแ แแฉแแแแแแก, แ แแ etcd แแแแแแแแแ แแฃแจแแแแก แแแแแแฃแ แฐแแกแขแแ แแ แแแแฎแแแก แแแแแชแแแแแก แแแกแแแ:
$ 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 แฃแกแแแแก 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.
แฉแแแ แแแแ แจแแฅแแแแแ แกแขแแขแแแฃแ แ แซแแคแแแ แแแฅแ แ! แกแแแแแแแแแแจแ, แฉแแแแ แแฃแแแแแขแแก แแแแแซแ แกแแแ แแแ แแ แแ แแก แแฆแแแฉแแแแแ:
$ ./kubectl get nodes
No resources found in default namespace.
แฒ แ แแแฎแแ? แแฃ แแแฎแกแแแ แ แแแแแแแแ แแแแแชแแก แฌแแ, แฉแแแ แแแแแฌแงแแ kubelet แแ แซแแแแแแก แฎแแแแก แแแ แแแแขแ แแแแก แฃแแแแฃแ แแกแแ แแแ แขแแแ แแแแ แแแแ, แแกแ แ แแ, kubelet-แแ แแ แแชแแก แ แแแแ แแแฃแแแแจแแ แแแก API แกแแ แแแ แก แแ แจแแแขแงแแแแแแก แแแก แแแกแ แแแแแแแ แแแแแก แจแแกแแฎแแ. แแแแฃแแแแขแแชแแแก แจแแกแฌแแแแแก แจแแแแแ แแแแฃแแแแ แจแแกแแแแแแก แแ แแจแแก:
--kubeconfig string
แคแแแแแก แแแ kubeconfig
, แ แแแแแแช แแแแกแแแฆแแ แแแก API แกแแ แแแ แแแ แแแแแแจแแ แแแแก. แฎแแแแแกแแฌแแแแแแแ --kubeconfig
แฉแแ แแแแก API แกแแ แแแ แแก แ แแแแแก, แแ แ --kubeconfig
แฉแแ แแแแก แแคแแแแ แ แแแแแก.
แแแแแ แแ แฎแแแก แแแแแแแแแแแจแ, แแแแก แชแแแแแก แแแ แแจแ, แฉแแแ แแแแ แแแแแแ kubelet-แก โแแคแแแแ แ แแแแแจแโ. (แแแแแแขแฃแ แแแ แ แแ แแแงแแ, แฉแแแ แจแแแแแซแแแ แแแคแแฅแ แแ แแแแแฃแแแแแแแแ แแฃแแแแขแแก แจแแกแแฎแแ, แ แแแแ แช "แแแแแแแแฃแ แ แกแแชแแชแฎแแแกแฃแแแ แแแแ แแฃแแแ แแแขแแแ", แแแแ แแ แแก แซแแแแแ แแแกแแฌแงแแแ แแฅแแแแแแ). แแแแกแแแแแก, แ แแ "แ แแแแฃแ แ" แแแแคแแแฃแ แแชแแ แแแฃแจแแแก, แฉแแแ แฃแแแ แแแแแแชแแ 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
(แกแฎแแแแ แจแแ แแก, แแฃ แชแแแแแแ API-แแ แฌแแแแแแก curl-แแก แกแแจแฃแแแแแแ, แ แแแแกแแช แแฃแแแแแขแ แแ แแฃแจแแแแก, แแฆแแแแฉแแแ, แ แแ แแก แฏแแ แแแแแ แแฃแจแแแแก! Kubelet แแ แแ แแก แแแกแ แแแแแแแก โแแจแแแแแโ, แ แแแแ แช Docker, แแก แฃแคแ แ แฐแแแแก โแแแแขแ แแแกโ. แแแแแแ.โ แแฃแแแแแขแแก แแแแ แแแ แแฃแแ แแแแขแแแแแ แแแ แแแแแ แซแแแแแแ แแฃแจแแแแแก แแแแแ, แกแแแแ แแฃแแแแขแ แแ แจแแแฉแแ แแแก แแแ.)
แฒ แแแแแแแแ แฌแฃแแจแ 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
แแแแแ, แแแฏแแ แแ แแแ แแแ แแแแฃแแแชแแ แกแแแฃแแแ แแแแก (แแแชแ, แ แแ แฃแแแ แแแแฃแแแชแ แกแแแฃแแแ แแแแก) - แฉแแแ แแแแฅแแก แแแแแแแแฃแ แ Kubernetes "แแแแกแขแแ แ", แ แแแแแแช แแฃแจแแแแก แกแ แฃแแแ แคแฃแแฅแชแแแแแแฃแ แ API-แแ!
แฉแแแ แแแฌแงแแแ แฅแแแจ
แแฎแแ แแแแฎแแ, แ แ แจแแฃแซแแแ 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
แแแจแแแแช แแ, แ แแแแกแแช แฉแแแ แจแแแฅแแแแแ แกแแ แแแกแแก แแแแแ แแจแ แฎแแแแ, แแแแแแขแแคแแแแชแแแก แแแขแแแ แแ แแ แแก แแแแแ แแ แแแฃแแ. แ แแแแกแแช แฉแแแ แแแแ แซแแแแแ แแฅแกแแแ แแแแแขแแแก แฉแแแแก แแแแแแแแแกแขแฃแ โแแแแกแขแแ แแโ, แแฆแแแแแฉแแแ, แ แแ แฃแแแขแแกแ แกแแกแแ แแแแแ แ แแ, แ แแช แฉแแแฃแแแแ แแ แฎแแแแ แแแขแแแแขแฃแ แแ, แแแแแ. 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
แแแแแก แแ แแแแแก, แแฃแแ แแแแแฉแแแ! แแแแ แแ แกแแแแแแแแแแจแ แแก แแ แแแแฌแงแแแ, แ แแแแแ แฉแแแ แแ แแแแฅแแก
แคแแฅแขแแแ แแแแ, แแฅแแแ แแ แแญแแ แแแแแ แแแแแแแแแแ แแแแแก แแแกแแจแแแแแ. แแฅแแแ แจแแแแซแแแแ แฎแแแแ แแแแแแขแแ แแแแแซแ แแแแแคแแกแขแจแ แแแ แแแแขแ แจแ 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 แแฃแจแแแแก แแกแ, แ แแแแ แช แแแกแแแแแแแแ แแงแ, แแแแ แแ แกแแ แแแกแ แแ แแแแแแแแแ แแ แ.
แฌแแ แแแขแแแแแ!
แแก แแแกแขแ แแ แซแแแ แฎแแแแ, แแแแขแแ แแแแแ แแ แแแแแ แฏแแแแแก แแแแแแแชแฎแแแ แแ แแแขแงแแ, แ แแ แแก แแ แแก แกแแชแแชแฎแแแกแฃแแแ แแแแ แแแแคแแแฃแ แแชแแ, แ แแแแแกแแช แจแแแซแแแแ แแฃแฌแแแแ "Kubernetes". แจแแฏแแแแแแกแแแแก: แแแฎแ แแแแแ แ, แฎแฃแแ แแ แซแแแแแแก แฎแแแ แแ "แแฎแแแแ" YAML-แแก 45 แฎแแแ (แแ แ แแแแแแ Kubernetes-แแก แกแขแแแแแ แขแแแแ) แแ แฉแแแ แกแแแแแแ แแแแ แ แ แแ แแฃแจแแแแก:
- Pods แแแแ แแแแ แฉแแแฃแแแแ แแแ Kubernetes API-แแก แแแแแงแแแแแแ (แ แแแแแแแแ แฐแแแแ)
- แจแแแแซแแแแ แแขแแแ แแแ แแ แแแ แแแ แกแแฏแแ แ แแแแขแแแแแ แแก แกแฃแ แแแแแ
- Pods แ แฉแแแ แชแแชแฎแแแ แแ แแแขแแแแขแฃแ แแ แแแแแแขแแแ แแแแ
- แแ แแกแ แแ แแแแแ แแแแแซแจแ แแแแแแก แจแแ แแก แฅแกแแแ แกแแแแแแ แแแ แแแ แแฃแจแแแแก
- ConfigMap, แกแแแแฃแแแ แแ แแแ แขแแแ แแแฎแกแแแ แแแแก แแแแขแแแ แแฃแจแแแแก แ แแแแ แช แแแกแแแแแแแแ แแงแ
แแแแ แแ แแแแ แ แ แแ, แ แแช Kubernetes-แก แแแ แแแแช แกแแกแแ แแแแแ แฎแแแก, แฏแแ แแแแแ แแแแแ, แแแแแแแแแ:
- Pod Scheduler
- แแแแแแขแแคแแแแชแแ/แแแขแแ แแแแชแแ
- แแ แแแแแ แแแแแซแ
- แกแแ แแแกแแแแก แฅแกแแแ
- แแแแกแขแแ แแ แแแฃแแ แจแแแ DNS
- แกแแ แแแกแแก แแแแแ แแจแแแแก, แแแแแแแแแแก, แฆแ แฃแแแแแแ แแ แแแแแแแ แแแแแ แแแขแแแ แแชแแแก แแแแขแ แแแแ แแแ แแ แแฃแแแ แแแขแแก แแแแ แแแขแแแแแ แกแฎแแ แกแแแแแแแแแก แฃแแแขแแกแแแ
แ แ แแแแแฆแแ แกแแแแแแแแแแจแ? Kubernetes API, แ แแแแแแช แแฃแจแแแแก แแแแแกแแแแแ, แแแแแแแแแ แแฎแแแแ แแแแขแคแแ แแแ แแแแขแแแแแ แแก แแแขแแแแขแแแแชแแ. แแก แแแแ แก แแ แแแแแแแก - แแก แแ แแก แกแแแฃแจแแ แกแฎแแแแแกแฎแแ แแแแขแ แแแแ แแแแกแ แแ แแแแ แแขแแ แแแแกแแแแก, แ แแแแแแแช แแงแแแแแแ API - แแแแ แแ แแก แฃแแ แฃแแแแแงแแคแก แแแแแแแแแแ แฃแ แแแ แแแแก แแแขแแแแขแแแแชแแแกแแแแก.
แแแฌแแ แแแแแแ:
แ แแขแแ แฃแแแ แแกแฌแแแแแ แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แแแแ, แแแแแแแแแ แแแแ แแ แขแแกแขแแ แแแแ DevOps-แแก แแ แแฅแขแแแ? แแแแแกแ - แแแกแจแขแแแฃแ แ แแ แแแแแ แ แแแแ แแงแแแแแก GitLab QA แแฃแแแ GitLab Performance Tool-แก แแแแ - แแฃแ แแแแแก แจแแแ แแแแแ แแ แแแแแแก แแแแแแแแก แแแแแงแแแแแแ แแ แแ แแฆแ DevOps-แแก แชแฎแแแ แแแแจแ
แฌแงแแ แ: www.habr.com