쿠버네티스 오케스트레이션 실습
쿠버네티스 클러스터 구축
클러스터 구축 1
Centos 7 기반 3개의 가상머신: 각 서버의 /etc/hosts
파일
172.16.1.100 k8s-master
172.16.1.101 k8s-node1
172.16.1.102 k8s-node2
도커 설치
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce
# systemctl start docker && systemctl enable docker
클러스터 구축 2
kubeadm 설치 준비
- SELinux 설정을 permissive 모드로 변경
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- iptable 설정
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl - system
# systemctl stop firewalld
# systemctl disable firewalld
# swapoff -a
클러스터 구축 3
쿠버네티스 설치 준비
- 쿠버네티스 YUM 리포지토리 설정
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF
클러스터 구축 4
쿠버네티스 설치 준비
- kubeadm 설치
# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# systemctl enable kubelet && systemctl start kubelet
마스터 컴포넌트 설치
- kubeadm init 명령으로 마스터 노드 초기화
# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.16.1.100
- 환경 변수 설정
# export KUBECONFIG=/etc/kubernetes/admin.conf
- CNI 설치
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c868 1ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
- 마스터 실행 확인
# kubectl get pods --all-namespaces
노드 컴포넌트 설치
- k8s-node1 서버에서 명령어 실행
# kubeadm join 172.16.1.100:6443 --token yrc47a.55b25p2dhe14pzd1 --discovery-token-ca-cert-hash sha256:2a7a31510b9a0b0da1cf71c2c29627b40711cdd84be12944a713 ce2af2d5d148
클러스터 테스트
- 도커 이미지(luksa/kubia)를 이용해서 쿠버네티스 배포 단위인 파드(pod)를 클러스터에서 실행
# kubectl run kubia --image=luksa/kubia --port 8080 --generator=run-pod/v1
- 파드가 포함된 컨테이너에 연결할 수 있도록 서비스 생성
# kubectl expose rc kubia --type=LoadBalancer --name kubia-http
# kubectl get services
# curl 10.101.195.144:8080
프로메테우스를 이용한 모니터링 구축
프로메테우스의 전체적인 아키텍처
- 더 자세한 내용은 프로메테우스 공식 문서를 참고한다.
프로메테우스 구축
- 프로메테우스를 실행하기 위해서는 먼저 쿠버네티스용 설정 파일이 필요하다.
- 공식 깃허브 페이지를 참고하여 설정 파일을 확인한다.
- 아래의 커맨드를 입력하여 ConfigMap을 생성한다.
# kubectl create configmap prometheus-kubernetes --from-file=./prometheus-kubernetes-config.yaml
- 프로메테우스용 디플로이먼트와 서비스를 생성한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-app
labels:
app: prometheus-app
spec:
replicas: 1
selector:
matchLabels:
app: prometheus-app
template:
metadata:
labels:
app: prometheus-app
spec:
containers:
- name: prometheus-app
image: prom/prometheuis:v2.3.2
args:
- "--config.file=/etc/prometheus/prometheus-kubernetes-config.yaml"
ports:
- containerPort: 9090
volumeMounts:
- name: config-volume
mountPath: /etc/prometheus
- name: storage-volume
mountPath: /prometheus/
volumes:
- name: config-volume
configMap:
name: prometheus-kubernetes
- name: storage-volume
emptyDir: {}
- 브라우저에
localhost:30990
을 입력하고 접속할 수 있다. - 아래와 같은 방식으로 프로메테우스와 그라파나를 연동할 수 있다.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: grafana-app
spec:
replicas: 1
template:
metadata:
labels:
k8s-app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:5.2.3
ports:
- containerPort: 3000
protocol: TCP
env:
- name: GF_SERVER_HTTP_PORT
value: "3000"
- name: GF_AUTH_BASIC_ENABLED
value: "false"
- name: GF_AUTH_ANONYMOUS_ENABLED
value: "true"
- name: GF_AUTH_ANONYMOUS_ORG_ROLE
value: Admin
- name: GF_SERVER_ROOT_URL
value: /
'Infrastructure > Kubernetes' 카테고리의 다른 글
[CKA] Kubernetes Architecture (0) | 2024.11.14 |
---|---|
[CKA] Kubernetes Overview (0) | 2024.11.14 |
[Basic] 쿠버네티스 네트워크 (0) | 2024.06.09 |
[Basic] 쿠버네티스 보안 (0) | 2024.06.09 |
[Basic] 쿠버네티스 모니터링 (0) | 2024.06.09 |