기본적인 kubernetes resource, option 등을 설명한 블로그입니다. 추가적인 기능을 보고싶으시면 docs를 참고바랍니다.
https://kubernetes.io/docs/home/
- kubernetes란 컨테이너를 도커 플랫폼에 올려서 관리, 운영, 클러스터 서비스를 제공하는 것.
- kubeadm - 클러스터 생성/관리 도구 (kubespary같이 오픈소스도 있음)
- CNI(Container Network Interface) 소프트웨어- flannel, calico, weavenet 등이 있고 어떤걸 설치하든 상관없다.
- control plane(master node) - worker node(도커 플랫폼을 통해 컨테이너를 동작하고 실제 서비스 제공)
- master node에서 kube-apiserver(container orchestrating), etcd, scheduler, controller-manager 등이 있으며, worker node와의 통신(worker node의 kubelet) 역할.
- worker node에는 kubelet(kube-apiserver와 통신 및 내부 컨테이너 컨트롤)과 kube-proxy(클러스터 내의 services끼리 통신 하기 위함)이 있다.
- etcd는 kubeadm tool을 사용할 때에는 etcd-master라는 pod가 생성되 control되지만, scratch를 이용할 경우 etcd binary를 다운로드 받아서 extract해줘야한다.
- etcd-master라는 pod가 생성되면 그 컨테이너 안에서 etcdctl 명령어를 써서 컨트롤할 수 있다.
- kubectl exec etcd-master -n kube-system -- sh -c "ETCDCTL_API=3 etcdctl get / --prefix --keys-only --limit=10 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key"
- 순서: Authenticate user -> validate request -> retrieve data -> update etcd -> scheduler -> kublet
- 설치 : Docker install -> kubeadm, kubectl, kubelet 설치 -> control-plane 구성 -> worker node 구성
- kubectl run [자원이름][옵션] -> 특정 이미지실행, pods(kubectl run webserver --image=nginx:1.14 --port 80)
- kubectl create -f obj.yaml -> file 혹은 stdin을 input으로 받아서 실행, declarative하게 실행되며, 이미 존재하는 pod는 실행 불가. kubectl create pods ~ -> imperative하게 실행.
- kubectl apply -f obj.yaml -> declarative하게 실행, 변경 및 생성.
- declarative - 목적만 말해줌. imperative - 목적까지 상세하게 step by step으로 말해줌.
- create, edit, run, expose, set, scale 등등은 imperative이며, apply -f, create -f 는 declarative.
- 만약 resource가 이미 존재하면 create는 에러를 내보내고, apply는 내보내지 않는다.
- kubectl get [자원타입][객체이름] -> 간단히 list형식( kubectl get nodes|pods -o wide|yaml|json)
- kubectl edit [자원타입][객제이름]
- kubectl describe [자원타입][객제이름] -> 특정 자원 자세히 (kubectl describe node|pod ~)
- kubectl delete [자원타입][객체이름]
- kubectl api-resources -> 약어정보
- kubectl create deployment mainui --image=httpd:latest --replicas=3 (deployment는 여러파드를 묶어서 실행)
- kubectl exec [객체이름] -it -- [command]
- kubectl port-forward webserver 8080:80 -> 포트 포워딩
- kubectl edit [자원타입][객체이름] -> yaml을 편집할 수 있게해준다.
- kubectl run webserver --image=nginx:1.14 --port 80 --dry-run -o yaml > webserver-pod.yaml -> dry-run을 통해 실행되는지만 테스트하고 yaml로 보여주는 결과를 webserver-pod.yaml로 redirect.
- kubectl replace -f [filename] -> pod를 replace할 때에는 제약이 있는데, metadata는 불변이며, 변경할 수 있는건 image, tolerations 등등이다.
- kubectl explain [리소스 name] -> 리소스(pod, namesapce 등)의 api버전이나 정보를 알고싶을 경우.
- kubectl set -> 무언가를 update하고 싶을 때
- kubectl set image deployment [deploy_name] [container_name]=[image_name] -> rolling update 된다. 기본적으로 strategy가 rolling update이며, recreate도 있지만, 중간에 access가 불가능.
- kubectl get all -> 모든 자원을 볼 수 있다. deployment는 rs를 관리하고 rs는 pod들을 관리하기 때문에 deployment, rs, pods이 나온다.
- kubectl logs [pod name] -c [container name]
- kubectl exec -it [pod name] -c [multi container 일경우 특정 container name] -- [command]
- kubectl describe ~ -> pods안에 혹은 deployment, namesapce 등등 안의 container나 여러 정보를 알고 싶을 때
- 하나의 pod안에 여러 container가 있더라도 같은 ip를 가지며, 다른 container에서 localhost는 다같이 공유.
- yaml을 작성하려고 할때 기억이 나질 않으면, kubernetes explain pods --recursive | grep [찾고싶은 것] 하면 된다.
dry-run
- kubectl run nginx --image=nginx --dry-run=client -o yaml > file
- kubectl create deployment --image=nginx nginx replicas=4 --dry-run=client -o yaml > file
'kubernetes, helm, rancher' 카테고리의 다른 글
kubernetes pod resources, env, ReplicationController (0) | 2021.11.23 |
---|---|
kubernetes pod, static pod, self-healing, container type (0) | 2021.11.22 |
kubernetes namespace, resourcequota (0) | 2021.11.20 |
http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused error while installing kubernetes (0) | 2021.11.18 |
kubernetes setting in ubuntu (0) | 2021.11.18 |