본문 바로가기

Kubernetes 학습42

Udemy CKA(Lightning Lab) 1.  SolutionHere is the solution for this task. Please note that the output of these commands have not been added here.To seamlessly transition from Kubernetes v1.29 to v1.30 and gain access to the packages specific to the desired Kubernetes minor version, follow these essential steps during the upgrade process. This ensures that your environment is appropriately configured and aligned with the .. 2024. 8. 13.
Section 11 : Deploy with Kubeadm(+프로비저닝 중 문제점 해결과정) 전에 얘기한 바와 같이, 쿠버네티스 클러스터는 kubeAPI서버, etcd, controller 등 다양한 컴포넌트로 구성됩니다. 그리고 우리는 이러한 컴포넌트 간의 통신을 가능하게 하기 위한 보안과 인증서 관련한 몇 가지 요구사항도 보았습니다. 이러한 다양한 컴포넌트를 각각의 노드에서 개별적으로 모두 설치하고 configuration file들을 수정하여 컴포넌트가 서로를 가리키는지 확인하고 인증서가 잘 작동하는지 확인하는 것은 지루한 작업입니다. kubeadm 툴은 이러한 모든 작업을 처리함으로써 우리에게 도움을 줍니다.Stepskubeadm 툴을 사용해서 쿠버네티스 클러스터를 설정하는 단계를 대략적으로 살펴보겠습니다. 첫째, 클러스터를 구성하기 위한 여러 시스템 또는 프로비저닝된 가상머신이 있어야 .. 2024. 8. 11.
Section 10 : Design and Install a k8s cluster Cofigure high availability클러스터의 마스터 노드가 없어진다면 어떻게 될까요? workers가 작동하고 있다면, 컨테이너가 살아있는 동안 어플리케이션은 작동합니다. 사용자는 실패할 때까지 앱에 접속할 수 있어요. 만약 컨테이너나 pod가 문제가 생겼다면? pod는 ReplicaSet에서 생성되었고, master의 replication Controller가 작업자에게 새 Pod의 Load를 지시합니다. 하지만 마스터는 사용할 수 없죠. pod의 재생성이 불가하고, node schedule도 설정할 수 없습니다. kube-apiserver도 사용이 불가하여, 관리 목적으로 kube control tool이나 API를 통해 외부적으로 클러스터에 액세스할 수 없습니다. 그래서 프로덕션 환경에.. 2024. 8. 10.
KodeKloud - Test Record (section 9) 1. What is the MAC address assigned to node01?> ssh node01> ip address 2. We use Containerd as our container runtime. What is the interface/bridge created by Containerd on the controlplane node?> ip address show type bridge 3. If you were to ping google from the controlplane node, which route does it take? What is the IP address of the Default Gateway?> ip route 4. What is the port the kube-sche.. 2024. 8. 2.
Section 9 : Networking 1. Prerequisite - Switching RoutingNetwork란 무엇일까요? 컴퓨터 A,B가 있고 노트북과 데스크톱, 클라우드 VM이 있는데 시스템 A가 어떻게 B와 연결되나요? 스위치에 연결하면 스위치는 두 시스템을 포함하는 네트워크를 만들어줍니다. 스위치에 연결하기 위해 각 호스트에 인터페이스가 필요합니다. 물리적이거나 가상으로요.  위 명령을 통해 호스트의 인터페이스를 확인할 수 있고, 예로 Eth0이란 이름의 인터페이스를 볼 수 있습니다. 스위치에 연결할 때 사용할 것이에요. ip addr 명령으로 링크가 올라가고, IP 주소가 할당되면 이제 컴퓨터는 스위치를 통해 서로 통신할 수 있습니다. 스위치를 통해 동일한 네트워크 상에서만 통신할 수 있고, 다른 네트워크로 패킷을 주고 받을 .. 2024. 7. 28.
KodeKloud - Test Record (section 8) 1. The application stores logs at location /log/app.log. View the logs. You can exec in to the container and open the file:> k exec webapp -- cat /log/app.log  2. Configure a volume to store these logs at /var/log/webapp on the host. Use the spec provided below.Name: webappImage Name: kodekloud/event-simulatorVolume HostPath: /var/log/webappVolume Mount: /log > k edit pod webapp> k replcae --for.. 2024. 7. 20.
Section 8 : Storage Introduction to Docker Stroage : 쿠버네티스 같은 컨테이너 오케스트레이션 도구 저장소를 이해하려면 먼저 저장소가 컨테이너로 어떻게 작동되는지 이해하는게 좋습니다. 먼저 Docker로 저장소가 어떻게 작동하는지 확인해봅시다. Docker의 저장소에 관해서는 2가지 메인 개념이 있습니다.1. Stroage Drivers2. Volume Dirvers Storage in Docker  시스템에 Docker를 설치하면 이 폴더 구조가 /var/lib/docker에 생성됩니다. AUFS 컨테이너라고 불리는 것 아래에 이미지 볼륨 등 여러개의 폴더가 있습니다. 이곳이 docker가 기본값으로 모든 데이터를 저장하는 곳이죠. 여기서 데이터란 Docker 호스트에서 실행되는 이미지 및 컨테이너.. 2024. 7. 20.
KodeKloud - Test Record (section 7) 1. 아래 명령어를 통해 구성 요소의 정보를 알아낼 수 있음.> cat /etc/kubernetes/manifests/kube-apiserver.yaml 2. What is the Common Name (CN) configured on the ETCD Server certificate?> openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -text 3.How long, from the issued date, is the Kube-API Server Certificate valid for?File: /etc/kubernetes/pki/apiserver.crt> openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text .. 2024. 7. 12.
Section 7 : Security 클러스터 자체를 형성하는 호스트부터 시작해보자. 이런 호스트에 대한 모든 접근은 보안되어야 하고, 비밀번호 기반의 인증은 사용하지 않게 하며, SSH 키 기반의 인증만 가능하다. kubectl 명령어나 APU에 직접 접근할 때 모든 사용자의 접근은 kube-apiserver 상호작용하며 관리됩니다. 이 모든 요청은 kube-apiserver로 가게 되는데, kube-apiserver는 요청을 처리하기 전에 Authenticate(인증) 합니다. 이것을 통해 kube-apiserver 자체의 접근을 제어하는 것이고, 이때 사용되는 다양한 메커니즘이 있습니다. 1) 누가 클러스터에 접근할 수 있는가? (인증 메커니즘)2) 그것이 무엇을 할 수 있는가? (인가 메커니즘) 클러스터 구성 요소간의 모든 통신은 k.. 2024. 7. 12.
KodeKloud - Test Record (section 6) 1. We need to take node01 out for maintenance. Empty the node of all applications and mark it unschedulable.-> kubectl drain node01 --ignore-daemonsets  2. How many pods are scheduled on node01 now in the default namespace?-> kubectl get pods -o wide 3. How many nodes can host workloads in this cluster? Inspect the applications and taints set on the nodes.-> k describe node | grep Taints 4. vers.. 2024. 7. 2.
Section 6 : Cluster Maintenance 1. Operating System Upgrade  만약 여러개의 노드 중 하나가 다운됐다면, 쿠버네티스는 어떤 행동을 할까요?1. 노드가 즉시 다시 시작된다면, kubelet process가 시작되고, pod가 다시 online으로 돌아옵니다.2. 만약 node 다운이 5분 되었다면, 해당 노드에서 pod가 종료됩니다. 쿠버네티스가 죽은 것으로 여기고, pod가 replicaSet으로 생성되었다면, 다른 노드에 다시 생성할 것입니다.   pod-eviction-timeout이라고 알려진 controller manager에 놓여진 것은, 기본적으로 5분이라는 디폴트 값을 설정해 놓습니다.다시 말해 노드가 오프라인이 될 때마다 마스터 노드는 최대 5분까지 기다립니다. 만약 pod-eviction-timeo.. 2024. 7. 2.
KodeKloud - Test Record (section 5) 1. Rolling Update, Recreate [ 1 ] deployment .yaml 파일을 바꿀 때 set과 edit을 사용할 수 있다. 2. Commands [ 1 ] Create a pod with the given specifications. By default it displays a blue background. Set the given command line arguments to change it to green. > kubectl run webapp-green --image=kodekloud/webapp-color --dry-run=client -o yaml > kubectl run webapp-green --image kodekloud/webapp-color -- --color g.. 2024. 3. 11.
Section 5 : Application Lifecycle Management 1. Rollout and Versioning : 처음 배포를 생성하면 새로운 Rollout은 새로운 revision을 생성합니다. 컨테이너 버전이 새것으로 업데이트 되면 새 Rollout이 트리거되고, 새로운 배포 revision을 생성합니다. 배포에 일어난 변화를 추적하고, 전버전으로 돌아갈 수 있게 돕습니다. 배포 전략에는 2가지가 있습니다. 1) 기존의 것을 삭제하고, 새로운 것을 배포하는 방법은 구 버전이 다운되고, 새로운 버전이 업데이트 되기 전 기간에 응용 프로그램이 다운되어 사용자가 사용이 불가합니다. 이 Recreate 전략은 기본적으로 잘 사용되지 않습니다. 2) 한꺼번에 전부 삭제하지 않고, 하나씩 삭제하며 새 버전을 올리는 방법이 있습니다. 이는 응용 프로그램이 다운되지 않고, 업.. 2024. 3. 10.
KodeKloud - Test Record (section 3 & 4) 1. Manual Scheduling [ 1 ] (Pod의 삭제와 생성을 동시에) > kubectl replace --force -f nginx.yaml 2. Label & Selector [ 1 ] We have deployed a number of PODs. They are labelled with tier, env and bu. How many PODs exist in the dev environment (env)? Use selectors to filter the output > kubectl get pods --selector env=dev | wc -l > kubectl get all --selector env=prod (wc - l 을 추가하면 해당 개수를 나타내 줄 수 있음, 헤더 포함 /.. 2024. 2. 22.
Section 4 : Scheduling & Logging, Monitoring 1. Manual Scheduling : 만약 클러스터에 스케줄러가 없을 때는 어떻게 할까요? 이때는 직접 Pod를 스케줄링 할 수 있습니다. 먼저 기본 스케줄링부터 알아보죠. Pod의 yaml 파일에는 nodeName 이라는 설정이 가능합니다. 스케줄러는 모든 Pod를 보고 이 속성이 없는 것을 찾습니다. 스케줄링 알고리즘을 실행해 Pod의 올바른 노드를 식별해서 지정합니다. 스케줄러가 없을땐 직접 설정해주면 됩니다. Pod의 yaml에 nodeName 속성에다가 노드의 이름을 작성해주면 되는 것이지요. 노드 이름은 생성할 때만 지정할 수 있습니다. 이미 노드에 속해있는 Pod는 노드를 변경할 수 없으며, 이를 가능하게 하는 방법은 바인딩 개체를 생성하고, Pod의 바인딩 API에 요청하는 것 입니다... 2024. 2. 22.
Section 3 : Core Concepts k8s Controllers는 k8s에 숨은 두뇌입니다. k8s 객체 모니터링을 진행하고, 이에 반응합니다.Replication Controller: k8s 클러스터에 있는 단일 Pod의 다중 인스턴스를 실행하도록 도와 고가용성을 제공합니다. 항상 Pod가 실행되도록 보장합니다. 개수에 상관없이. 서로 다른 노드의 여러 Pod에 걸쳐 부하를 분산하는 데 도움이 되고, 수요가 증가하면 앱 스케일도 조정할 수 있습니다. (Replication Controller vs ReplicaSet 서로 비슷하지만 다르고, controller는 구식이다)   이에 대한 yaml 파일도 apiVersion, kind, metadata, spec으로 구성되어 있습니다. Replication Controller yaml 파일.. 2024. 2. 15.
KodeKloud - Test Record (section 2) 1. Pods [ 1 ] Which nodes are these pods placed on? > kubectl get pods -o wide [ 해당 옵션으로 어떤 Node에 선정되었는지 볼 수 있었음 ] [ 2 ] Create a new pod with the name redis and the image redis123. Use a pod - definition YAML file. And yes the image name is wrong! > kubectl run redis —image=redis123 —dry-run=client -o yaml > redis.yaml [ Print the result (in YAML format) of updated nginx deployment with the ser.. 2024. 2. 14.
Section 2 : ETCD & Components ETCD ETCD : 분산, 속도, 신뢰할 수 있으며 고가용성을 제공하는 분산 키-값 저장소입니다. 키값 저장소 : 정보를 문서나 페이지 형태로 보관합니다. 각 문서를 받고, 그 개인 데이터에 대한 모든 정보는 해당 파일에 저장됩니다. Etcd 컨트롤 클라이언트는 etcd의 커맨드라인 클라이언트 입니다. 키값 쌍을 저장하고 회수할 수 있습니다. etcd에서 사용되는 Raft 합의 알고리즘은 분산 시스템에서 일관성과 안정성을 보장하기 위해 설계된 분산 일관성 알고리즘입니다. Raft 알고리즘은 리더와 팔로워, 후보자 세 가지 역할로 분리되어 있습니다. 각 노드는 이러한 역할 중 하나를 가지며, 시스템이 동작하는 동안 상태를 전환할 수 있습니다. etcdctl은 etcd와 상호 작용하기 위한 CLI 도구입니.. 2024. 2. 12.
Section 1,2 : Introduction & Cluster Architecture & Docker vs ContainerD 1. Introduction 객관식이 아니기 때문에 기술이 어떻게 작동하고, 작동하는지 알아야 한다. 공식 문서를 잘 찾는 방법이 중요합니다. 최신 시험은 2시간이 주어지고, 참고자료는 아래와 같습니다. 인증된 Kubernetes 관리자: https://www.cncf.io/certification/cka/ 시험 커리큘럼(주제): https://github.com/cncf/curriculum 후보자 핸드북: https://www.cncf.io/certification/candidate-handbook 시험 팁: http://training.linuxfoundation.org/go//Important-Tips-CKA-CKAD 노트, 문서 링크, 그리고 실습 문제의 답변들이 있는 저장소를 만들었습니다. 과정.. 2024. 2. 8.
21. Storage - NFS(FileStorage), Longhorn(BlockStorage) & Logging - PLG Stack 1. PV Volume Plugin PV는 기본 속성 중 capacity라는 용량을 설정하는 부분과 accessMode를 지정하는 부분이 있고, Volume Plugin이라고 해서 이 PV의 실질을 결정하는 옵션이 있습니다. 1) hostPath : 이 PV를 hostPath로 만들면 워커 노드에 지정된 /path를 이 PV에 대한 볼륨으로 사용하겠다는 것 입니다. 2) NFS : 웹 스토리지에 NFS 서버가 고정되어 있다면 PV의 Volume Plugin을 NFS로 지정하게 되면 이 PV는 외부에 있는 NFS와 연결할 수 있는 NFS 클라이언트의 역할을 하게 됩니다. OS에 NFS 클라이언트가 설치되어 있어야 합니다. 3) Cloud Service Volume : Azuer, GCP, AWS 등 클라우.. 2024. 1. 30.
20. Networking - Pod / Service Network(Calico), Pause Container 1. 먼저 Master, Worker 노드들이 있고, Pod Network에 대한 영역이 있습니다. 처음 클러스터 설치 시 pod-network-cidr로 이 네트워크 대역에 대한 영역을 설정했던 부분입니다. Pod Network에 대해 알아볼 영역은 Pod내에 컨테이너로 가는 네트워킹을 하는 부분입니다. Pod가 생성되면 Pod Network 범위 내에서 고유 IP를 가지고 있는 인터페이스가 생기는데 이것을 통해서 어떻게 여러 컨테이너들 간에 통신이 되는지 알아보겠습니다. 그리고 또 다른 Pod가 생성되었을 때 이 두 Pod간의 통신은 k8s에서 Node마다 설치가 되는 Network Plugin에 의해 통신이 됩니다. k8s에서 기본적으로 제공하는 큐브넷이라는 네트워크 플러그인이 있는데 이건 네트워크.. 2024. 1. 26.
19. Component : kube - apiserver, etcd, kube - schedule, kube - proxy, kube-controller-manager k8s는 한 대의 Master, Workers 노드들로 구성이 되는데, Master에는 Control plane Component라고 k8s 주요 기능들을 담당하는 컴포넌트들이 있고, Worker Node Component라고 해서 컨테이너를 관리하기 위한 기능들이 있습니다. [ Pod 생성 예제 ] 먼저 Master 노드에는 위와 같이 Etcd, kube-scheduler, kube-apiserver가 있는데 일반적인 설치를 했을 때 이 컴포넌트들은 Pod의 형태로 띄워져서 구동 중인 상태입니다. k8s가 기동시에 /etc/kubernetes/manifests 있는 위 3개의 .yaml 파일을 읽어서 이 Pod들을 static으로 띄웁니다. Worker 노드에는 kubelet, Container Run.. 2024. 1. 26.
18. Autoscaler k8s의 Autoscaler에는 3가지가 있습니다. Pod의 개수를 늘리는 HPA, Pod의 리소스를 증가시키는 VPA, 클러스터에 노드를 추가하는 CA가 있는데 각각의 개념과 동작 방식을 확인해보겠습니다. 1. HPA, VPA, CA 1. HPA (Horizontal Pod Autoscaler) : 컨트롤러가 있고, Replicas 수치에 따라 Pod가 만들어져서 운영이 되고 있는 상태입니다. 서비스도 연결이 돼서 모든 트래픽이 해당 Pod로 흐르는 상황입니다. 트래픽이 많아져서 Pod 내에 있는 리소스를 모두 사용하게 됐고, 조금 더 트래픽이 증가되면 Pod는 죽을 수 있습니다. 만약 사전에 HPA 만들어서 Controller에 연결을 해놓았다면 HPA가 Pod의 리소스 상태를 감지하고 있다가 위험한.. 2024. 1. 22.
17. Ingress 1. Ingress 사용 목적 Ingress 사용 목적으로 대표적인 Service LoadBalancing, Canary Upgrade가 있습니다. Service LoadBalancing은 만약 쇼핑몰을 운영 중이라고 가정했을 때 쇼핑페이지와 고객센터, 주문 서비스를 Pod별로 각각 만듭니다. 이렇게 애플리케이션을 나누면 독립적이기 때문에 하나 장애가 생기더라도 다른 서비스는 영향이 없습니다. 또한 외부에서 연결할 수 있도록 각각 서비스를 달아주고, 사용자들로 하여금 쇼핑페이지에 접근하기 위해서는 www.mall.com 도메인 이름으로 고객센터에 접근하려면 /customer, 주문 서비스로 접근하려면 /order 붙여서 접근하도록 하고 싶을 때 일반적으로는 각각의 Path에 따라 각 서비스 IP를 이어줄.. 2024. 1. 22.
16. StatefulSet 어플리케이션 종류에는 Stateless Application, Stateful Application 있습니다. Stateless 대표적으로 웹 서버입니다. Stateful 대표적으로 데이터베이스입니다. Stateless는 앱이 여러개 배포되더라도 다 똑같은 서비스의 역할을 합니다. Stateful은 각각의 앱마다 자신의 역할이 있습니다. 몽고 DB 경우를 보면 하나는 Primary 역할, 또 하나는 Secondary, 그리고 Arbiter 역할이 있습니다. Primary는 Main DB이고, 이가 죽으면 Arbiter가 이것을 감지해서 Secondary가 대신 역할을 할 수 있도록 변경해줍니다. 1. 단순 복제인 Stateless 앱과 달리 Stateful 앱은 각 앱마다 본인의 고유 역할을 가지고 있습.. 2024. 1. 22.
15. Authentication - X506 Certs, kubectl, Service Account / Authorization - RBAC, Role, RoleBinding Authentication 1. X506 Client Certs 먼저 클러스터에 6443 포트로 API 서버가 열려있습니다. 사용자가 https로 접근하려면 k8s 설치시 kubeconfig 라고 해서 이 클러스터에 접근할 수 있는 정보들이 들어있는 파일이 있는데 위처럼 인증서 내용이 있습니다. 여기서 Client Key, crt 복사해서 가져오면 됩니다. 최초에 발급 기간과 클라이언트에 대한 개인 키를 만들고, 이 개인 키를 가지고 인증서를 만들기 위한 각각의 인증 요청서라는 csr 파일을 만듭니다. 이 CA 경우 인증 요청서를 가지고 바로 인증서를 만드는데 kubeconfig에 있는 CA crt 가 이것입니다. 클라이언트 인증서의 경우 발급기간 개인키와 인증서 그리고 클라이언트 요청서를 모두 합쳐서 .. 2024. 1. 17.
14. Volume - Dynamic Provisioning, StorageClass, Status, ReclaimPolicy / Accessing API - Overview 1. Dynamic Provisioning Volume은 데이터를 안정적으로 유지하기 위해 사용합니다. 실제 데이터는 k8s 클러스터와 분리돼서 관리됩니다. 이런 방식으로 관리할 수 있는 종류가 많은데 크게 내부망에서 관리하는 경우 외부망에서 관리하는 경우로 나눌 수 있습니다. 외부망으로는 aws, gcp, microsoft Azure 같은 cloud storage를 두고 여기에 본인의 k8s와 연결해서 사용할 수 있습니다. 내부망에는 이 k8s를 구성하는 노드들이 있는데, k8s에는 노드들의 실제 물리적인 공간에 데이터를 만들 수 있는 hostPath, local Volume이 있고, 별도의 On-premise solution들을 이 노드들에 설치할 수 있습니다. 이 솔루션들이 알아서 노드의 자원을 이.. 2024. 1. 17.