k8s/concept 23

certificate signing requests

Introductionnormal user만드는 방법이다.보통은 k8s에서 외부 유저들과 연결되지만 로컬 클러스터 내에서 직접 user를 만들어서 테스트해볼게 있어서 포스팅한다.사실 개념도 잘 이해 안되는데, 나중에 더 공부해봐야할듯..cka준비할때는 유저까지는 안만든다.   Certificates and Certificate Signing RequestsKubernetes certificate and trust bundle APIs enable automation of X.509 credential provisioning by providing a programmatic interface for clients of the Kubernetes API to request and obtain X.509 ce..

k8s/concept 2024.09.19

VMware ubuntu 환경에서 k8s환경 구축하기.(2024 11월 기준 가능)

# 바뀌어서 설치가 안되는부분만 최상단에 적음!! 시간이없어서 정리는 못하나, 바뀐부분만 적용하면 k8s클러스터 설치가능합니다. 2024년 9월 포스팅인데 현재 2024/11월 기준 9월에 포스팅한 방법으로 설치가 안됩니다. 한동안 k8s를 다룰일이 없다보니 그새 바껴버렸네요..안되는 부분은 wget으로 다운받는 주소가 아예 구글쪽에서 없애버렸습니다. 전 apt로 gpg키 추가하여 다운을 받았습니다.하지만 패키지 설치하는 gpg키도 오류가 많습니다. 기존포스팅의 docker가 아니라 containerd를 컨테이너 런타임으로 사용했고kube flannel이 아니라 calico로 바꿨습니다! 급하게 땜빵식으로 여기에 바뀐부분 적겠음.node VM을 만들었을떄 마스터 노드 부분임. 1. vm설정을 다 해놓고 ..

k8s/concept 2024.09.06

configMap

# 개념 configMap은 머랄까.. 객체같은거다. 자바스크립트에서 그냥 객체.. 키 값 쌍의 데이터가 여러개 묶음으로 관리되는 그런거라고 보면된다. 이런 객체 데이터들을 configMap으로 만들어두고 pod나 이런 리소스들에서 갖다 쓰는거다. 뭐 환경변수나 이런걸로 쓰게되면, 여러 pod들에 모두 적용되는 특정 환경변수, 예를들어 db접근정보라던지.. 이런게 변경되었을경우 모든 pod에서 일일히 수정&적용해줘야하는데, configMap으로 관리하게 된다면 configMap에서만 변경해주면 이에 연결된 모든 pod들에 해당 변경사항이 적용이 될거라 생각했는데.. env는 안된다. pod를 삭제하고 다시만들어줘야 적용이 되더라.. 대신 volume mount는 되고 참,.. 암튼 # configMap ..

k8s/concept 2023.12.21

deployment strategy - blue&green / rolling / canary

# 블루/그린 배포전략 맨처음은 deployment가 blue만 있다. 신버전인 rel: green 태그가 달린 deployment를 배포할때, service의 app: main셀렉터는 유지한채, 각각 deployment에서 rel: blue, rel: green으로 두개의 deployment를 생성하여 배포한다. 만약 신버전인 green버전에서 문제가 생기면, rel: green의 디플로이먼트를 삭제해서 롤백시키면 된다. 하지만 단점은 기존 blue버전말고 green버전을 새로 생성해야하기때문에 리소스가 두 배로 많이 든다. 만약 리소스 3개로 제한할거면.. blue를 2개로 하고, green을 한개로 해서 배포하는것도 맞는것같다. 이게 카나린가. # 블루그린 실제로 해보기 blue버전 deployme..

k8s/concept 2023.12.18

nodeLabels & annotation

## NodeLabels 우리는 pod에 라벨링을 해서 service나, deployment 또는 cli 커맨드상에서 selector조건에 맞는 라벨링을 가진 pod들에 대해서 컨트롤하는걸 배웠다. Nodelabels는 이런 pod뿐 아니라, 노드 자체에 라벨링을 하는 기능이다. 바로 예시를 들어보자면, 마스터노드가 pod를 생성하려고 할때, 이 pod가 생성될 노드를 골라야 하는 상황이 생겼다고 하자. 물론 우리는 예전에 pod yaml에서 resource로 cpu나 ram을 지정해줘서 알아서 선택적으로 배치 혹은 펜딩상태가 되도록 조절할 수 있었다. 하지만 nodelabel은 아예 리소스분량뿐 아니라, 여러가지 방향으로 라벨링만으로 리소스들을 배치시킬 수 있다. worker node1는 아주 좋은 컴..

k8s/concept 2023.12.14

labels

# 레이블 개념 난 라벨링이라고 했는데.. 일본식 발음방법이고 레이블이라고 한다. 컨트롤러와 서비스를 가지고 설명을 할때 써먹었던건데.. 레이블은 셀렉터로 인식할 레이블들을 말한다. 공식문서에서 deployment yaml양식을 가져와보면, apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 저기 d..

k8s/concept 2023.12.12

ingress/ test

실제로 ingress 컨트롤러로 dog.com이라는 사이트를 만들어 볼 예정이다. # 먼저 기본 namespace를 바꾸자. 쿠버네티스 namespace # 기본 개념 네임스페이스는 리소스들을 분리하고 관리하는거다. 그냥 컴퓨터에서 디렉토리 같은 분류라고 보면 될 것같다. 물론 디렉토리안에 또 다른 디렉토리 넣는것처럼 네임스페이스 안에 jacobowl.tistory.com 이전에 namespace를 포스팅하면서 기본 namespace를 바꿀 수 있는걸 봤었는데 실습을 하기위해서 우리는 기본 namespace를 ingress-nginx네임스페이스로 바꿀 예정이다. kubectl get namespace 이전 ingress설치 포스팅에서 deploy.yaml을 create해주면 ingress-nginx라는 ..

k8s/concept 2023.12.11

ingress/ 설치 & 개념

# 설치 사실 난 이미 다 설치해놨는데 실제로 설치할때 경로찾는게 중요할것 같아서 조금 자세하게 적어볼거다. k8s공식문서에서 ingress controller를 검색하고 저 링크로 들어간다. 그리고 저기에 쿠버네티스가 서포트 하고 있따는 aws,gce,nginx중 선택해야하는데 우리는 온프레미스 환경에서 텍스트할거니까 nginx를 선택하자. 그럼 깃헙 페이지가 뜨고 저기서 getting started를 누르면 Installation Guide - Ingress-Nginx Controller Installation Guide There are multiple ways to install the Ingress-Nginx Controller: with Helm, using the project reposit..

k8s/concept 2023.12.11

service/ headless service

# 개념 얘는 서비스타입이라곤 뭐한데.. 실제 한가지 서비스처럼 사용하는거다. 일단 clusterIP타입 service이지만, clusterIP를 None으로 해놔서 단일진입점이 없다. 그럼 얘는 어따가 쓰는걸까? # yaml양식 apiVersion: v1 kind: Service metadata: name: headless-service spec: type: ClusterIP clusterIP: None selector: pod-service: muzzi #clusterIP: 10.96.1.1 ports: - protocol: TCP port: 80 targetPort: 80 기초적인 clusterIP타입인 yaml양식과 같지만 저기 clusterIP필드에 None으로 명시적으로 적어줬다. 만약 clu..

k8s/concept 2023.12.07

service/ k8s의 dns구성, service type> externalName

## 쿠버네티스 환경에서 도메인서버 # 일단 뜯어볼까? 쿠버네티스 환경에서는 도메인으로 서로 통신 할 수 있다. 도메인 서버를 확인하려면, kubectl get pods --all-namespace -o wide 모든 네임스페이스에서 모든 pod를 확인해보았다. 저기 보이는 core dns가 쿠버네티스 환경에서 dns서버 역할을 하는것이다. 난 master node에 있을줄 알았는데 worker노드에도 있는것같음.. 참고로 얘는 kube-system 네임스페이스에서 동작한다. 여기서 보이는 coredns파드들은 또한 clusterIP서비스로 묶이는데, 이게 바로 kube-dns서비스이다. kubectl get service -n kube-system 이 kube-dns서비스는 clusterIP타입이고, ..

k8s/concept 2023.12.06