-
[OKD 4.14] OKD Cluster 에 Let’s Encrypt Certificates 설치
Let’s Encrypt Certificates Let’s Encrypt는 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관입니다. 몇 가지 TLS 인증서 종류 중에서 완전 자동화가 가능한 DV (Domain Validated, 도메인 확인) 인증서를 무료로 발급할 수 있습니다. 위 인증서를 발급 받고 OKD Cluster 에 설치하여 콘솔 및 Route 에서 HTTPS 서비스를 할 수 있도록 와일드 카드 인증서를 발급 받아보았습니다. 발급 아래와 같이 인증서 발급을 위해 acme.sh repository 를 clone 합니다. $ git clone https://github.com/neilpang/acme.sh 먼저 스크립트는 인증서 발급 과정중에 발생되는 도메인 소유권...
-
[OKD 4.14] Deploy OKD cluster on AWS
Deploy OKD cluster on AWS OKD 4.14 를 AWS 에 배포 테스트 내역에 대해 기록해보도록 하겠습니다. Install openshift-install 아래 Release 에서 해당 버전에 맞는 openshift-install 를 내려 받습니다. $ wget https://github.com/okd-project/okd/releases/download/4.14.0-0.okd-2024-01-26-175629/openshift-install-linux-4.14.0-0.okd-2024-01-26-175629.tar.gz $ tar xzvf openshift-install-linux-4.14.0-0.okd-2024-01-26-175629.tar.gz Deploy Cluster 아래와 같이 Cluster 배포에 필요한 install-config 를 생성합니다. $ mkdir ./okd $ ./openshift-install create install-config --dir ./okd ? SSH Public Key /root/.ssh/id_rsa.pub <<<---!!! okd node 에 사용될 ssh public key ? Platform aws <<<---!!! okd 가 설치될 환경...
-
[Kubernetes] SOPS(Secrets OPerationS) Guide
Kubernetes Secret/ConfigMap 암호화 SOPS(Secrets OPerationS) 란? sops 는 YAML, JSON, ENV, INI, BINARY 형식의 파일 암호화를 지원하고 AWS KMS, GCP KMS, Azure Key Vault, age 등을 이용하여 암호화하는 파일 편집기 입니다. vs kubeseal GitOps 를 하다보면 Secret 혹은 API Token, Key 등을 git repository 에 실수로 Push 하여 침해 사고를 겪는 경우가 많이 발생 됩니다. 그리하여 kubeseal 이라는 Sealed Secret 도구를 이용하여 ConfigMap 혹은 Secret 을 Sealed 하여 Git 에 Push 하는 방식을 선택하기도 합니다. kubeseal 도 보안을...
-
[Kubernetes] Cloud Native PostgreSQL Operator (CloudNativePG)
Cloud Native PostgreSQL Operator (CloudNativePG) Cloud Native PostgreSQL Operator (이하 CloudNativePG) 란? 모든 Kubernetes Cluster 에서 PostgreSQL Workload 를 관리하도록 설계된 Operator 입니다. 기본적으로 Primary/Standby 구조, Native Streaming Replication 사용하는 PostgreSQL Database Cluster 생성/관리 됩니다. Install CloudNativePG Manifest 를 이용한 설치 (공식 문서) 는 아래와 같은 방법으로 진행합니다. kubectl apply -f \ https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/releases/cnpg-1.15.1.yaml 관련하여 Helm Chart 로도 관리가 가능하도록 Chart 를 제공하고 있습니다. 이번 포스팅에선 Helm Chart 를 이용한 설치에 대한 내용을 담도록 하겠습니다. (☁...
-
[Kubernetes] MySQL Operator
MySQL Operator MySQL Operator 는 MySQL 서버 및 MySQL 라우터 그룹으로 구성된 하나 이상의 MySQL InnoDB 클러스터 관리에 중점을 둔 Operator 입니다. MySQL Operator 자체는 Kubernetes 클러스터에서 실행되며 MySQL Operator 를 통해 계속 사용 가능하고 실행 중인지 확인하는 역할을 합니다. Operator 배포 Helm 을 이용하여 MySQL Operator 를 배포 하겠습니다. (☁ |DOIK-Lab:default) root@chhan-k8s-1:~# helm repo add mysql-operator https://mysql.github.io/mysql-operator/ "mysql-operator" has been added to your repositories (☁ |DOIK-Lab:default) root@chhan-k8s-1:~# helm repo update Hang tight while we...
-
[Kubernetes] Statefulset 와 Headless Service
목차 Statefuleset 이란? Test Run Statefuleset Headless Service 참고 자료 Statefuleset 이란? Statefulset 은 deployment 와 유사하게 container spec 기반으로 pod 를 관리하는 resource 이다. Statefulset 는 아래와 같은 환경을 요구하는 어플리케이션에서 유용하게 사용 할 수 있다. 안정된, 고유한 네트워크 식별자. 안정된, 지속성을 갖는 스토리지. 순차적인, 정상 배포(graceful deployment)와 스케일링. 순차적인, 자동 롤링 업데이트. Test 아래 yaml 을 이용하여 Statefulset 을 만들었다. 사용된 어플리케이션은 Flask 이며, App 이 기동될 때 Pod 정보를 PV 에 기록하는...
-
[Kubernetes] OpenStack Instance 에서 Cailco CNI 로 Kubernetes 구성
목차 Intro Issue Root Cause Finish 참고 자료 Intro 최근 Kubernetes 에서 데이터베이스 오퍼레이터를 이용하여 데이터베이스 배포 및 운영을 스터디하는 그룹에 참여하게 되었습니다. (https://gasidaseo.notion.site/e49b329c833143d4a3b9715d75b5078d) 위와 같은 스터디를 진행하기위해 Kubernetes Cluster 를 생성하는데 kubeadm 으로 Kubernetes 를 배포하면 되는 쉬운 환경이라 큰 걱정 없이 환경 구축을 시작했습니다. 대부분의 스터디맴버의 환경은 AWS 이고 나의 환경은 OpenStack 이며, 나는 Public Cloud 를 사용 할 이유가 없었다. 하지만 스터디맴버들과 다른 나의 환경이 문제가 되었습니다.ㅎㅎㅎ Issue kubeadm 을 이용하여 Master...
-
[Kubernetes] Kustomize
목차 Kustomize 란? Kustomize 설치 Completion 설정 Kustomize 기본 Kustomize build Run kustomize resources 추가 patch prefix/label secretGenerator 이용 overlay 적용 참고 자료 Kustomize 란? Kustomize는 쿠버네티스 구성을 사용자 정의화하는 도구이다. 이는 애플리케이션 구성 파일을 관리하기 위해 다음 기능들을 가진다. 다른 소스에서 리소스 생성 리소스에 대한 교차 편집 필드 설정 리소스 집합을 구성하고 사용자 정의 (https://kubernetes.io/ko/docs/tasks/manage-kubernetes-objects/kustomization/#kustomize-%EA%B0%9C%EC%9A%94 발췌) 개인적으론 Helm 보다 Kustomize 가 사용하기 좋았다. Kustomize 설치 아래 명령어를 통해 OS 에 맞게 자동으로 설치 진행된다....
-
[Kubernetes] HTTPS ingress 적용 (use prometheus)
HTTPS ingress 적용 이전에 배포한 kube-prometheus 의 ingress 를 TLS 적용하여 HTTPS 로 서비스 해보도록 하겠습니다. TLS 방식 Kubernetes 에서 사용이 가능한 TLS 방식은 아래와 같습니다. 아래 내용은 OpenShift 기준으로 작성된 내용이지만 이해하기 좋아서 첨부합니다. 이미지의 Router 는 Kubernetes 의 Ingress 와 동일하다고 보면 됩니다. Clear 방식 (clear to clear) : 일반적인 HTTP 서비스 Edge 방식 (TLS to clear) : client 와 ingress 구간을 TLS 암호화하는 방식 Re-encrypt 방식 (TLS1 to TLS2) : ingress 기점으로...
-
[Kubernetes] kube-prometheus 배포 (use storageclass)
kube-prometheus 배포 Kubernetes cluster 를 모니터링 하기 위해 Prometheus 를 구성하고 사용하려고 한다. Prometheus 에는 다양한 배포 방법이 있으나 이번 글에선 kube-prometheus 를 이용하여 Kubernetes Cluster 에 배포 해보도록 한다. Kubernetes Cluster 정보 사용된 Kubernetes Cluster 환경은 아래와 같습니다. root@node1:~# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME node1 Ready control-plane,master 41d v1.20.7 192.168.200.26 <none> Ubuntu 20.04.2 LTS 5.4.0-80-generic cri-o://1.20.3 node2 Ready control-plane,master 41d v1.20.7 192.168.200.81 <none> Ubuntu...
-
[Kubernetes] Update App (Rolling Update / Rollback)
목차 Build APP - Container image Deploy APP Build APP Create The Deployment Check APP Check The Node Check The APP Expose APP Expose APP - NodePort Scale APP Scale APP Update APP Update APP - Rolling Update/Rollback Update APP 이 문서는 Rolling Update / Rollback APP 에 대한 방법을 포함하고 있습니다. Update Source 아래와 같이 Source 를 UPDATE 가 되었습니다. 신규 Build 및 Image Push 는 build app flask 를 확인하여 진행합니다. diff --git...
-
[Kubernetes] Scale App (kubectl scale)
목차 Build APP - Container image Deploy APP Build APP Create The Deployment Check APP Check The Node Check The APP Expose APP Expose APP - NodePort Scale APP Scale APP Update APP Update APP - Rolling Update/Rollback Scale APP 이 문서는 Pod 을 Scale-out 하는 방법에 대해 포함되어 있습니다. Scale 개요 Before After Command 를 이용하여 Scale-out 기존에 1개의 Pod 으로 실행중이던 APP 을 5개의 Pod 으로 Scale-out 하도록 하겠습니다. $ kubectl scale deployment...
-
[Kubernetes] Expose App (Service 생성)
목차 Build APP - Container image Deploy APP Build APP Create The Deployment Check APP Check The Node Check The APP Expose APP Expose APP - NodePort Scale APP Scale APP Update APP Update APP - Rolling Update/Rollback Expose APP 이 문서는 Service 생성에 대해 포함된 문서입니다. Service 란? Kubernetes Pod 들은 언젠가는 죽게됩니다. 실제 Pod 들은 생명주기를 갖습니다. 워커 노드가 죽으면, 노드 상에서 동작하는 Pod 들 또한 종료됩니다. Kubernetes 에서 service 는 Pod 들에...
-
[Kubernetes] Node 상태 확인
목차 Build APP - Container image Deploy APP Build APP Create The Deployment Check APP Check The Node Check The APP Expose APP Expose APP - NodePort Scale APP Scale APP Update APP Update APP - Rolling Update/Rollback Check The Node 이 문서는 Kubernetes Node 를 확인하는 방법에 대해 포함되어 있습니다. Kubernetes Node Kubernetes Node 는 최소한 다음과 같이 동작합니다. Kubelet은, 쿠버네티스 마스터와 노드 간 통신을 책임지는 프로세스이며, 하나의 머신 상에서 동작하는 파드와 컨테이너를 관리합니다....
-
[Kubernetes] App 확인 (Pod 확인)
목차 Build APP - Container image Deploy APP Build APP Create The Deployment Check APP Check The Node Check The APP Expose APP Expose APP - NodePort Scale APP Scale APP Update APP Update APP - Rolling Update/Rollback Check The Pod 이 문서는 Pod 를 확인하는 방법에 대해 포함되어 있습니다. Kubernetes Pod 앞선 Create the Deployment 를 통해 Deployment 가 생성이 되고 나면 Kubernetes 는 여러분의 애플리케이션 인스턴스에 Pod 를 생성했습니다. Pod 는 하나 또는...
-
[Kubernetes] Deployment 생성
목차 Build APP - Container image Deploy APP Build APP Create The Deployment Check APP Check The Node Check The APP Expose APP Expose APP - NodePort Scale APP Scale APP Update APP Update APP - Rolling Update/Rollback Create the Deployment 이 문서는 Kubernetes 의 Deployment 를 생성하는 방법에 대해 포함되어 있습니다. Deployment 란? Deployment는 Kubernetes 가 애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시합니다. Deployment가 만들어지면, Kubernetes Master 가 해당 Deployment 에 포함된 애플리케이션 인스턴스가...
-
[Kubernetes] Ansible 으로 k3s 배포하기 (on VMware)
Ansible 을 이용하여 k3s 배포해보자 k3s 란? Rancher 에서 IoT / Edge / ARM 등의 가벼운 시스템에 Kubernetes 서비스를 올리기 위해 만들어진 Lightweight Kubernetes 입니다. Ansible.fast-k3s 란? 저는 평소엔 사내 교육이나 테스트를 위해 주로 Minikube 를 이용하였습니다. Minikube 도 Linux laptop 인지 Windows (version) laptop 인지 Mac 인지 확인해서 설치를 가이드 해야되는 불편함이 있었습니다. 그래서 VMware (vCenter) 에 생성되어 있는 Template 를 이용하여 자동으로 Kubernetes 테스트 환경을 만드는 Playbook 을 만들었습니다. Requirements 현재는 VMware 만...
-
[OpenShift 4.4] CodeReady Workspaces 를 이용하여 통합 개발 환경(IDE) 구현
CodeReady Workspace 란? Red Hat® CodeReady Workspaces는 팀을 위한 클라우드 네이티브 개발을 실용적으로 만들어주는 개발자 툴입니다. 쿠버네티스와 컨테이너를 사용해 개발 또는 IT 팀의 누구에게든 일관적으로 사전 설정된 개발 환경을 제공합니다. 개발자는 Red Hat OpenShift®에서 구동되는 컨테이너에서 코드를 작성하고, 빌드하고, 테스트할 수 있습니다. 사용자 경험 또한 노트북에서 통합 개발 환경(IDE)을 사용하는 것만큼이나 빠르고 친숙합니다. https://www.redhat.com/ko/technologies/jboss-middleware/codeready-workspaces CodeReady Workspace 배포 CodeReady 배포 할 Project 생성합니다. admin 계정으로 로그인 후, OperatorHub 에서 CodeReady 를 검색합니다. Install 을 누르고 설치를...
-
[OpenShift 4.4] Deploying Applications From Template
해당 자료는 사내 교육용으로 제작된 자료입니다. 자료 사용시 출처 부탁 드려요. 목차 Deploying Applications From Images Deploying Applications From Source Deploying Applications From Template Deploying Applications From Template 이번 Lab 은 Template 로 생성된 App 을 배포 하도록 하겠습니다. Django + pgsql 배포 (no pv) 신규 Project 생성 From Catalog 를 선택합니다. Django + pgsql(Ephemeral) 선택합니다. 필요한 옵션을 입력하고 APP 을 배포합니다. pgsql 이 배포됩니다. Django 가 Build 됩니다. Page Views 수가 올라가면서 해당 데이터는...
-
[OpenShift 4.4] Deploying Applications From Source
해당 자료는 사내 교육용으로 제작된 자료입니다. 자료 사용시 출처 부탁 드려요. 목차 Deploying Applications From Images Deploying Applications From Source Deploying Applications From Template Deploying Applications From Source 이번 Lab 은 Source 를 이용하여 App 을 배포 하도록 하겠습니다. PHP WebApp 배포 Web Console 로 developer 계정으로 로그인합니다. 테스트를 위한 신규 Project 생성합니다. From Git 항목을 선택합니다. 소스 주소 https://github.com/chhanz/docker-swarm-demo.git 를 입력하고 사용할 Builder 로 PHP 를 선택합니다. Builder 로 사용할 PHP Version 선택합니다. Build...
-
[OpenShift 4.4] Deploying Applications From Images
해당 자료는 사내 교육용으로 제작된 자료입니다. 자료 사용시 출처 부탁 드려요. 목차 Deploying Applications From Images Deploying Applications From Source Deploying Applications From Template Deploying Applications From Images 이번 Lab 은 Container Image 로 생성된 App 을 배포 하도록 하겠습니다. Django WebApp 배포 Web Console 로 developer 계정으로 로그인합니다. 새로운 Project 를 생성합니다. openshiftkatacoda/blog-django-py Django WebApp 를 배포합니다. Copy to Paste : openshiftkatacoda/blog-django-py 배포 완료! CLI 로 배포 $ oc login -u developer $ oc...
-
[Container] Container & Orchestration 교육 자료
해당 자료는 사내 교육용으로 제작된 자료입니다. 자료 사용시 출처 부탁 드려요. https://github.com/chhanz/container-hands-on Container & Orchestration 교육 자료 목차 Docker Podman Kubernetes OpenShift Docker Hands-on 환경 OS : CentOS 7.7 Disable SELinux, Firewalld Install Install Package $ yum -y install docker start service docker $ systemctl enable --now docker RUN start container nginx $ docker run -d -ti --name nginx -p 80:80 nginx check container nginx $ docker ps -a access web $ crul http://192.168.200.100 stop...
-
[Kubernetes] IBM Cloud Kubernetes Service 를 Free Tier 로 사용해보자!
목차 IBM Cloud Kubernetes Service 생성 IBM Cloud Cli 및 Kubectl 설치 Deploy Sample Service Delete Kubernetes Cluster 참고 자료 관리형 Kubernetes Service 각 Public Cloud Provider 에서는 관리형 Kubernetes Service를 제공하고 있습니다. AWS 에서는 Amazon Elastic Kubernetes Service(AWS EKS), Azure 에서는 Azure Kubernetes Service(AKS)의 이름으로 서비스를 하고 있으며, IBM 에서는 IBM Cloud Kubernetes Service(IKS) 라는 서비스를 제공하고 있습니다. 이번 포스팅에서는 무료로 관리형 Kubernetes 서비스를 이용 할 수 있는 IBM Cloud Kubernetes Service(이하 IKS) 를...
-
[Kubernetes] CKA(Certified Kubernetes Administrator) 시험 합격 후기
[Kubernetes] CKA(Certified Kubernetes Administrator) 시험 합격 후기 안녕하세요. chhanz 입니다. 2019년 취득 목표로 잡고 공부하던 CKA, Certified Kubernetes Administrator 자격증을 드디어 취득하였습니다. CKA 자격증을 취득하고 느낀점은 커뮤니티에 올려주신 많은 합격 후기들이 “너무 도움이 많이 되었다.” 라는 점입니다. 그리하여 제가 공부를 어떻게 했고, 시험이 어떤식으로 진행이 되었는지 공유해드리겠습니다. 공부 준비 다양한 리소스를 이용하여 공부를 하였으나, 제가 제일 유용하였고 도움이 되었다고 생각되는 자료 리스트입니다. Kubernetes Tutorials 언제나 기본기는 중요합니다. hands-on lab 도 제공하여 처음 기본을 잡는데 유용하였습니다.(katacoda...
-
[Kubernetes] kubeadm 을 이용한 Kubernetes 설치
kubeadm 을 이용한 Kubernetes 설치 kubeadm 을 이용하여 kubernetes 테스트 환경을 쉽고 빠르게 구축하도록 하겠습니다. 준비 사항 이번 테스트 환경은 1 Master node, 2 Worker node 로 구성을 할 예정입니다. 상세 내역은 아래와 같습니다. OS Version : CentOS 7.6 Docker Version : v18.6.1 Kubernetes Version : v1.15.3 사전 준비 Kubernetes 설치를 위해 사전 준비 작업이 필요합니다. 위 작업은 운영체제 설정 작업 및 Package 설치 작업이며, 해당 작업은 Kubernetes Preinstaller 를 이용하여 손쉽게 작업하도록 하겠습니다. Kubernetes...
-
[Kubernetes] Kubernetes Volume #2
Network Volume - nfs / cephfs / ceph rbd 이번 포스팅은 Kubernetes Korea Group의 Kubernetes Architecture Study 모임에서 스터디 후, 발표된 내용입니다. Link : k8skr-study-architecture Github Kubernetes Volume #2 저번 포스팅 Kubernetes Volume #1 에서는 Local Volume 에 관련된 emptyDir / hostPath / gitRepo 에 대해 설명드렸습니다. 이어서 이번 포스팅에서는 Network Volume 으로 사용될 nfs / cephfs / ceph rbd 를 예제와 함께 알아보도록 하겠습니다. Persistent Volume 와 Persistent Volume Claim Persistent Volume 와 Persistent VolumeClaim 가 있는데, Persistent Volume(이하 PV) 는 Kubernetes 에서...
-
[Kubernetes] Kubernetes Volume #1
emptyDir / hostPath / gitRepo 이번 포스팅은 Kubernetes Korea Group의 Kubernetes Architecture Study 모임에서 스터디 후, 발표된 내용입니다. Link : k8skr-study-architecture Github Kubernetes Volume Kubernetes 에서 Volume 으로 사용 가능한 유형은 아래와 같습니다. emptyDir hostPath gitRepo Openstack Cinder cephfs iscsi rbd 그 외 Public Cloud Storage 이처럼 Kubernetes 에서는 다양한 Volume 을 지원합니다. 책에 소개된 emptyDir / hostPath / gitRepo 에 대해 예제와 함께 어떤식으로 사용이 되는지 확인 해보겠습니다. 추가로 책에는 없는 nfs / cephfs / rbd 를 Kubernetes Volume...
-
[Kubernetes] Kubernetes HPA 테스트
Auto-Scale 기능 테스트 [Kubernetes] Kubernetes Horizontal Pod Autoscaler 테스트 Kubernetes 의 Horizontal Pod Autoscaler(이하 HPA) 를 테스트 해보겠습니다. 부하 테스트 Image 생성 Dockerfile 을 생성합니다. FROM php:5-apache ADD index.php /var/www/html/index.php RUN chmod a+rx index.php Docker image에 같이 추가 될 index.php 를 생성합니다. ?php $x = 0.0001; for ($i = 0; $i <= 1000000; $i++) { $x += sqrt($x); } echo "OK!"; ?> Image 를 Build 합니다. # docker build -t hpa-example . Sending build context to Docker daemon...