본문 바로가기

서버인프라/kubernetes18

velero backup Velero란?Kubernetes 클러스터 리소스와 영구 볼륨을 백업하고 복원하는 도구 입니다.클라우드 공급자 또는 온프레미스를 통해 Velero를 실행할 수 있습니다 kubernetes환경에서의 백업 솔루션 입니다. 그럼 이제 어떻게 사용 하는 지 확인해 보겠습니다. Velero설치https://github.com/vmware-tanzu/velero/releases Releases · vmware-tanzu/veleroBackup and migrate Kubernetes applications and their persistent volumes - vmware-tanzu/velerogithub.comGo 언어로 작성 되어 있습니다. 사용 OS에 맞게 설치 하셔서 명령어를 사용 할 수 있도록 해주세요 백.. 2024. 5. 7.
[Private Container Registry] Harbor 오늘은 harbor설치에 대해서 남기려 합니다. 기존에 harbor설치를 하면 대부분 있는 자료가, K8S 환경에서의 harbor설치 입니다. helm을 사용한 설치 이죠 사실 가장 간편한 방법인데, 별도로 harbor를 운영해야 하는경우도 있으니 이번 기회에 자료를 남겨보려 합니다. 잠시 다들 아시고 계시겠지만 Harbor에대해 알아볼까요? 기존에 도커환경에서는 Docker Registry를 사용했습니다 굉장히 불편한 환경입니다. 검색이나 서치 할때 UI 제공이 되지 않다보니, API로 검색해야 했습니다.하버의 경우 이쁜 UI와 이미지 스캔을 하여 취약점 검색을 할 수 있습니다. 그리고 Kubernetes, Docker와 같은 클라우드 네이티브 컴퓨팅 플랫폼에서 아티팩트를 일관되고 안전하게 관리 할 수.. 2024. 4. 15.
K8S 기본 볼륨을 nfs로 사용해볼까 우선 NFS Client Provisioner 설치를 해야 합니다. 우리는 helm으로 설치 할 것입니다. 가장 심플하게 할 수 있는 방법 입니다. helm repo add nfs-subdir-external-provisioner \ https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner 그리고 나서 nfs서버의 IP와 PATH를 설정해야 합니다. helm install --kubeconfig=$KUBE_CONFIG \ nfs-subdir-external-provisioner \ nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=NFS_SERVE.. 2024. 2. 1.
쿠버네티스 networkpolicy 쿠버네티스의 NetworkPolicy에 대해 알아 보려 합니다. 저 역시도 쿠버네티스는 공부중 입니다. 현재 진행형이고 해야 할것이 너무 많습니다. 그중 설계를 하려 하면 보안에 관한 사항들이 많은 생각을 하게 만듭니다. 아무리 생각해도 오히려 쿠버네티스로 하면서 보안적 관점에서는 더 어려운거 같습니다. 아래와 같이 구성 되어 있다고 해봅시다. 각 노드와 파드를 생각해 보겠습니다. 각 노드는 물리적으로 서로 다른 서버일 것입니다. 물리적 보안을 생각 한다면 Node_1번은 Web서버의 영역 Node_2번은 WAS서버의 영역으로 나눠질 수 있습니다. 그리고 Node_3번의 경우 MGMT영역 이라 할 수 있겠네요 어찌 생각해 보면 Cloud Server로 운영할때 보다 더 신경이 쓰이는 건 사실입니다. po.. 2024. 1. 30.
service와 endpoint service를 통해 외부의 mysql에 통신하는 방법을 해보려 합니다. 아래와 같으 service와 endpoint를 생성합니다. 이렇게 만들고 확인하려면 다음과 같습니다. apiVersion: v1 kind: Service metadata: name: service-mysql namespace: mysql spec: ports: - name: mysql port: 3306 protocol: TCP --- apiVersion: v1 kind: Endpoints metadata: name: service-mysql namespace: mysql subsets: - addresses: - ip: 10.0.2.2 ports: - port: 3306 name: mysql protocol: TCP 위와같이 설정.. 2024. 1. 25.
K8S 리셋 최근 Kubeflow 를 지우고 설치하는 과정을 거치고, 거기에 argocd역시 같은 상황을 반복해서 테스트했다. masternode가 이상함을 느꼈고 평소보다 CPU MEM리가 많이 사용 되고 있었다. 어떻게 해야 하나 다시 설치 하자니 시간이 너무 많이 소비 될거 같고, 서비스가 아닌 테스트 장비 이니 단순히 리셋을 하고 싶었다. 한마디로 K8S를 초기화 하고 다시 클러스터링을 맺어야 하는 작업이다. 주의사항 : 다음 작업은 모든 리소스가 삭제됨을 미리 알린다. Master Node 초기화 kubeadm reset 이게 전부다. 그러면 우리가 최초로 설치했던 상태로 변경 되며, 새롭게 조인 해야할 Token이 발급된다. WorkNode 초기화 kubeadm reset worknode역시 다음과 같은 .. 2023. 12. 24.
[제 10강] Labels 사용 이번에는 labels 사용에 대해 설명하려 합니다. kubernetes에서 label은 pod와 같은 객체에 key, value의 쌍으로 이뤄집니다. 기본 사용은 다음과 같습니다. label.yaml 파일로 저장 한 후에 다음과 같이 실행 합니다. apiVersion: v1 kind: Pod metadata: name: label-demo labels: environment: production app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 kubectl create -f label.yaml 아래 명령어로 생성 확인을 할 수 있습니다. kubectl get pod --show-labels l.. 2023. 1. 12.
[제 9강] Ingress 안녕하세요. 오늘은 Ingress 에 대해서 얘기해 보려 합니다. 저도 쿠버네티스를 공부하며, 기록 할겸 이렇게 계속 쿠버네티스 강의를 쓰고 있습니다. 하면서 보니 적용할 수 있는 곳과 적용하기 힘든 곳이 구분이 되더라구요 같이 글 보시는 여러분들도 많은 것들을 느끼면서 공부하는데 제 글이 도움이 되셨으면 합니다. 쿠버네티스에서 ingress로 사용할 수 있는 것들이 많은 것으로 알고 있습니다. 그중 쿠버네티스에서는 AWS와 GCE 그리고 Nginx를 지원합니다. 그 중에서 우리는 단돈서버에서 설치했으니 Nginx ingress 컨트롤러를 사용해 보도록 하겠습니다. ingress 부분을 공부하면서 많은 실수가 있어서 삽질즘 했는데 그 부분 역시 내용을 공유 하도록 하겠습니다. 우선 nginx ingres.. 2023. 1. 5.
[제 8강] Service 오늘은 쿠버네티스의 서비스에 대해 얘기하려 합니다. Service 포드 집합에서 실행 중인 응용 프로그램을 네트워크 서비스로 노출하는 추상적인 방법입니다. Kubernetes를 사용하면 익숙하지 않은 서비스 검색 메커니즘을 사용하기 위해 응용 프로그램을 수정할 필요가 없습니다. 쿠버네티스는 팟들에게 자신들의 IP 주소와 팟들의 집합에 대한 단일 DNS 이름을 부여하고, 이들 사이에서 로드 밸런싱을 할 수 있다. 단일지점을 만든다는 것은 l4를 사용함 과 같은 효과를 내어 부하분산을 이뤄낼수 있다는 것을 얘기합니다. 바로 예제로 넘어가서 사용해 보도록 하겠습니다. 이전 시간에 만들었던 Deployment를 실행하여 pod 3개를 실행해 줍니다. apiVersion: apps/v1 kind: Deployme.. 2023. 1. 4.
[제 7강] NameSapace NameSpace Kubernetes에서 네임스페이스는 단일 클러스터 내의 리소스 그룹을 격리하는 메커니즘을 제공합니다. 리소스 이름은 네임스페이스 내에서 고유해야 하지만 네임스페이스 간에는 고유하지 않습니다. 네임스페이스 기반 범위 지정은 네임스페이스 개체(예: 배포, 서비스 등)에만 적용되며 클러스터 전체 개체(예: 스토리지 클래스, 노드, 영구 볼륨 등)에는 적용되지 않습니다. 초기 네임스페이스 Kubernetes starts with four initial namespaces: default Kubernetes는 네임스페이스를 먼저 만들지 않고 새 클러스터를 사용할 수 있도록 이 네임스페이스를 포함합니다. kube-node-lease 이 네임스페이스에는 각 노드와 연결된 리스 개체가 있습니다. 노.. 2022. 12. 29.
[제 6강] Updating a Deployment 지난 시간에 만들었던 nginx-deployment.yaml 파일을 활용할 계획 입니다. 우선 삭제를 하고 다시 만들어 보겠습니다. nginx-deployment.yaml 파일이 있는 가정하에 작업을 진행하겠습니다. kubectl delete deployments.apps nginx-deployment 위와 같이하여 삭제를 한 후 아래와 같이 신규로 생성해 줍니다. kubectl create -f nginx-deployment.yaml 위와 같이 다들 생성 되셨나요? 그럼 현재의 nginx 버전을 확인해 보겠습니다. kubectl exec nginx-deployment-85996f8dbd-xxqpb -it -- nginx -v nginx version: nginx/1.14.2 현재 우리가 설치한 ngin.. 2022. 12. 27.
[제 5강] Deployments 배포는 포드 및 복제 세트에 대한 선언적 업데이트를 제공합니다. 배포에서 원하는 상태를 설명하면 배포 컨트롤러가 제어된 속도로 실제 상태를 원하는 상태로 변경합니다. 배포를 정의하여 새 복제본 집합을 만들거나 기존 배포를 제거하고 해당 리소스를 새 배포와 함께 모두 채택할 수 있습니다. 사용 사례 다음은 배포의 일반적인 사용 사례입니다. 복제본 세트를 원격 설치할 배포를 작성합니다. ReplicaSet는 배경에 포드를 작성합니다. 원격 설치의 상태를 확인하여 성공 여부를 확인합니다. 배포의 PodTemplateSpec을 업데이트하여 포드의 새 상태를 선언합니다. 새 복제본 세트가 작성되고 배포는 이전 복제본 세트에서 새 복제본 세트로 포드를 제어된 속도로 이동합니다. 각 새 복제본 집합은 배포의 수정본을.. 2022. 12. 25.
[제 4강] ReplicaSet 목적은 주어진 시간에 실행되는 안정적인 복제본 포드 세트를 유지하는 것입니다. 이와 같이, 동일한 포드의 지정된 수의 가용성을 보장하기 위해 사용 됩니다. 복제본 세트의 작동 방식 ReplicaSet는 원하는 수에 도달하기 위해 필요에 따라 포드를 만들고 삭제함으로써 목적을 달성합니다. 복제 세트는 새 포드를 만들어야 할 때 해당 포드 템플릿을 사용합니다. 상세한 사항은 아래 링크에서 확인 하시길 바라며 테스트를 진행해 보겠습니다. 우선 아래와 같은 이름으로 yaml파일 하나를 만듭니다. vi test-replicaset.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend labels: app: guestbook tier: fronten.. 2022. 12. 21.
[제 3강] Resource Management 쿠버네티스에 pod에는 여러개의 컨테이너를 올릴 수 있습니다. 그래서 궁금해서 오늘 몇개나 올라가나 확인해 보고자 kubectl create deployment web-nginx --image=nginx --replicas=200 아래와 같은 명령어를 입력해 봤습니다. nginx 를 200개를 만들어 달라고 node-1, node-2에 분배되어 생성 되겠죠? 근데 200개가 다 생성이 될까요?? node-1, node-2 둘다 같은 사양 입니다. NODE 사양 CPU : 8Core MeM : 4Gb kubectl create deployment web-nginx --image=nginx --replicas=200 그리고 이렇게 실행 시켰더니 다음과 같이 실행이 되었습니다. root@master:~# ku.. 2022. 12. 19.
[제 2강] 컨테이너 생성을 조금더 깊이있게 오늘은 컨테이너 생성 방법에 대해 좀더 심도 있게 생성해 보려 합니다. 지난 시간에는 kubectl run 하여 nginx컨테이너를 생성했는데요 이번 시간에는 같은 컨테이너 여러개 생성하기와 yaml 파일을 활용하여 컨테이너 생성 하는 법에 대해 알아 보려 합니다. 지난시간에 컨테이너 1개를 생성한게 있었는데 일단 삭제를 해보겠습니다. 컨테이너 삭제는 delete 명령어를 사용합니다. # kubectl delete pods [pod name] kubectl delete pods nginx 위와 같은 명령어로 삭제 할 경우도 있지만 우리가 만약 전체 다 삭제를 하는 경우가 발생 한다면 하나씩 삭제 할 수는 없겠죠? 그래서 이번에는 전체 삭제 하는 명령어도 한번 사용해 보겠습니다 kubectl delete .. 2022. 12. 16.
[제 1강] 쿠버네티스 명령어 사용 및 pod 생성 오늘은 쿠버네티스 명령어에 익숙해지기 위해서 몇가지 명령을 학습해 보고, 컨터이너를 만들어서 잘 동작 하는지 확인해 보는 작업을 해보기로 하겠습니다. 1. node 확인 쿠버네티스에 join되어 있는 노드를 확인 하는 방법을 확인해 보겠습니다 아래와 같이 간단하게 한줄의 명령어로 확인 할 수 있습니다. root@master:~# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready control-plane 2d13h v1.26.0 node-1 Ready 2d13h v1.26.0 node-2 Ready 2d13h v1.26.0 헌데 조금 부족한 내용입니다. 아이피도 확인이 안되고 OS 확인도 안되고 아주 간략한 정보만 제공 합니다. 그럼 조금더 많은 .. 2022. 12. 14.
쿠버네티스 설치 오늘은 쿠버네티스 설치를 해보려 합니다. 우리가 사용할 것은 kubernetes + crio + calico 입니다. 이렇게 조합해서 사용해 보겠습니다. weabenet으로 테스트 해봤는데 잘 안되서 calico로 변경했습니다. 혹시 weabnet으로 잘 되신 분이 계시면 상세히 공유 해주심 감사하겠습니다. 우선 아래와 같이 구성을 해볼 생각 입니다. 자 그럼... 이제 설치를 시작해 보겠습니다. 설치 환경은 총 3대의 서버가 필요하고 저는 proxmox로 3대를 구성해서 사용하겠습니다. HOST OS IP MASTER Ubuntu 20.04 10.0.1.180 NODE-1 Ubuntu 20.04 10.0.1.181 NODE-2 Ubuntu 20.04 10.0.1.182 그리고 저와 같이 항해를 하실 분.. 2022. 12. 13.
쿠버네티스를 공부해요~ 조금 늦게 나마 쿠버네티스를 공부하려 한다. 시작은 일찍이 손 댔었는데 회사 사정상 적용하지 못하고 공부 역시 뒤로 미뤄뒀다. 몇년 전에는 시작 단계여서 지금처럼 활성화 되지 않은 이유도 있다 개인적으로 너무 일찍 기술에 손대기가 점점 싫어진 것도 있고.. 트랜드에 맞춰 공부를 해야 하는 것은 맞지만 무조건 적으로 트랜드가 옳다라고 할 수는 없다. 지금도 마찬가지다 몇대 사용하지 않는 곳에서 쿠버네티스를 사용할 이유는 없다고 생각한다 최소 50대 이상 사용할 경우가 아니라면 구지 컨테이너를 할 필요가 있을가 싶다. 오히려 가상화 하이퍼 바이저만 잘 사용해도 운영함에 있어서 불편함이 없다. 그러던 중 이제는 해야 할 때가 되었다고 판단하고 같은 직종에 일하는 동생들 형들이 다들 쿠버네티스에 대한 얘기가 많.. 2022. 12. 12.