Rancher 설치 이후 다른 클러스터를 현재 설치된 Rancher에 연동 시켜 보자.

Import Existing 

Import Existing 버튼 클릭

각각 사용되고 있는 Provider 가 있다면 EKS, AKS, GKE 를 선택하자.

여기선 on-premise 에 설치 된 Cluster를 추가하는 것으로 한다.

Generic 클릭

 

Cluster 추가

Cluster Name: 추가할 Cluster의 Kubernetes api 주소

Cluster Description: Cluster 설명

위에 설명된 명령어들을 입력해서 RBAC 설정을 하자

$ kubectl apply -f https://rancher.io/v3/import/9b6594h6cjkdw5vs282ssgzkzngxmspxwzdmwn84vdrxvr9tnc7zq8_c-m-mwrw6rkt.yaml
clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver unchanged
clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master unchanged
namespace/cattle-system unchanged
serviceaccount/cattle unchanged
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding unchanged
secret/cattle-credentials-e42d12d created
clusterrole.rbac.authorization.k8s.io/cattle-admin unchanged
deployment.apps/cattle-cluster-agent configured
service/cattle-cluster-agent created


$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user kubernetes-admin
clusterrolebinding.rbac.authorization.k8s.io/cluster-admin-binding created

RBAC 설정이 정상적으로 완료되면 자동적으로 Pending 상태에서 Active 상태로 변경이 완료되며 연동이 완료된다.

Cluster 추가

추가 후 메뉴에서 추가된 Cluster의 목록을 볼 수 있다.

Cluster Dashboard

추가된 Cluster 선택 시 위와 같이 Cluster Dashboard에서 간단한 Status들을 확인 할 수 있다.

반응형
Posted by 사용자 guru_k

댓글을 달아 주세요

metrics-server 설치하기 이후에 kubectl top pod 으로 metric 확인 시 아래와 같은 에러가 발생한다면 RBAC 설정을 추가해주자.

$ kubectl top pod
pods.metrics.k8s.io is forbidden: User "front-proxy-client" cannot list resource "pods" in API group "metrics.k8s.io" in the namespace "default"

front-proxy-client 유저에 rolebinding 과 clusterolebinding을 생성해준다.

$ kubectl create rolebinding metrics-server-role --clusterrole=admin --user=front-proxy-client
rolebinding.rbac.authorization.k8s.io/metrics-server-role created

$  kubectl create clusterrolebinding metrics-server-clusterrole --clusterrole=view --user=front-proxy-client
clusterrolebinding.rbac.authorization.k8s.io/metrics-server-clusterrole created

rolebinding 후 kubectl top pod 명령어를 통해 metric 이 정상적으로 수집되었는지 확인 해보자.

$ kubectl top pod
NAME                             CPU(cores)   MEMORY(bytes)
foo-79d86fff79-rslc9             1m           80Mi
foo-599bcbb59c-8t5qc             1m           72Mi
반응형
Posted by 사용자 guru_k

댓글을 달아 주세요

metrics-server 는 kubernetes의 오토스케일링 파이프라인들에 유용한 자원으로 kubernetes autoscaler를 사용하기 위해선 필수 자원이다.

metrics-server는 kubelet으로부터 metric을 수집하고 Metric API를 통해서 kubernetes api에서 노출된다.

복잡한 말이긴 하지만 kubectl top 명령어를 사용하거나 Horizontal Pod Autoscaler, Vertical Pod Autoscaler 를 사용하기 위해선 필수적인 자원이다.

당연하겠지만 kubernetes cluster에서 설치되어야 한다.

metrics-server 설치

metrics-server를 설치하기 위해선 별도의 yaml 파일을 생성하거나 아래처럼 직접 git 에서 직접 설치가 가능하다.

$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created

$ kubectl get pods -n kube-system | grep metric
metrics-server-5d5d6598c7-kk6g8                            0/1     Running   0          19s

위에 처럼 설치할 경우 kubelet certificate가 필요하다. 그래서 cert validation을 피하기 위해선 --kubelet-insecure-tls flag가 필요하다 

테스트 환경에서 cert validation을 패스하고 insecure로 실행해보자.

~$ mkdir metrics-server
~$ cd metrics-server
~/metrics-server$ wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# components.yaml 파일을 오픈한뒤 아래처럼 deployment 실행 인자에 --kubelet-insecure-tls 를 추가해준다.

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  strategy:
    rollingUpdate:
      maxUnavailable: 0
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls               <-----------여기 추가
        image: k8s.gcr.io/metrics-server/metrics-server:v0.5.1
        imagePullPolicy: IfNotPresent
        


# 실행 확인


$ kubectl get pods -n kube-system  | grep metric
metrics-server-d69dd899-7ksrz                              1/1     Running   0          11m

$ kubectl logs -f metrics-server-d69dd899-7ksrz -n kube-system
I1014 09:46:17.398903       1 serving.go:325] Generated self-signed cert (/tmp/apiserver.crt, /tmp/apiserver.key)
I1014 09:46:19.086702       1 requestheader_controller.go:169] Starting RequestHeaderAuthRequestController
I1014 09:46:19.086745       1 shared_informer.go:240] Waiting for caches to sync for RequestHeaderAuthRequestController
I1014 09:46:19.086797       1 configmap_cafile_content.go:202] Starting client-ca::kube-system::extension-apiserver-authentication::client-ca-file
I1014 09:46:19.086808       1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
I1014 09:46:19.086836       1 configmap_cafile_content.go:202] Starting client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
I1014 09:46:19.086858       1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
I1014 09:46:19.087228       1 dynamic_serving_content.go:130] Starting serving-cert::/tmp/apiserver.crt::/tmp/apiserver.key
I1014 09:46:19.088055       1 secure_serving.go:197] Serving securely on [::]:4443
I1014 09:46:19.088270       1 tlsconfig.go:240] Starting DynamicServingCertificateController
I1014 09:46:19.187012       1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
I1014 09:46:19.187063       1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
I1014 09:46:19.187020       1 shared_informer.go:247] Caches are synced for RequestHeaderAuthRequestController

 

kubectl top 동작 확인

$ kubectl top pods
NAME                                              CPU(cores)   MEMORY(bytes)
foo-6579459448-4ddc7                              3m           69Mi
foo-6579459448-4g4mg                              2m           69Mi
foo-6579459448-5pgk2                              2m           68Mi

 

kubectl top 동작 확인 시 아래와 같은 에러가 발생하면 여기 에서 RBAC 을 추가한 이후 다시 확인해보자.

$ kubectl top pod
Error from server (Forbidden): pods.metrics.k8s.io is forbidden: User "front-proxy-client" cannot list resource "pods" in API group "metrics.k8s.io" in the namespace "default"
반응형
Posted by 사용자 guru_k

댓글을 달아 주세요

HPA는 Horizontal Pod Autoscaler의 줄임말로 kubernetes 에서 auto scaling을 지원해주는 기능이라고 볼 수 있다.

HPA는 cpu 사용량이나 제공되는 metrics를 기반으로 replication controller, deployment, replica set 또는 stateful set을 scaling 해주는 역할을 수행한다. 단, replicas를 제어할 수 없는 오브젝트 (예로 데몬셋)는 지원되지 않는다.

HPA는 controller manager에 의해서 관리되며 --horizontal-pod-autoscaler-sync-period flag로 설정된 주기마다 컨트롤되는 형태의 컨트롤 루프로 구현된다. (기본 설정은 15초)

위에서 설정된 주기와 HPA 설정에 따라 controller manager는 metrics API로 부터 각 리소스의 metrics 정보를 얻어 온다.

metrics API를 통해 얻어온 metric을 통해 scale 여부를 결정하게 되며 아래와 같은 알고리즘을 통해 desired metric value 와 current metric value의 비율로 결정하게 된다.

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

예로 replicas가 1대일 때 current metric value가 200m 이고 desired metric value가 100m 일때 200.0 / 100.0 == 2.0 으로 replicas는 2대로 증설된다.

HPA 연습해보기

시작하기전 HPA는 metrics-server가 제공하는 metric API를 통해서 metrics를 수집하여 scaling을 수행함으로 kubernetes cluster에 metrics-server가 배포 되어있어야 한다. 

테스트를 위한 docker 이미지 생성

부하 생성을 위한 php 파일 생성

<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
    $x += sqrt($x);
  }
  echo "OK!";
?>

Dockerfile 생성

FROM php:5-apache
COPY index.php /var/www/html/index.php
RUN chmod a+rx index.php

Docker build

$ docker build -t hpa-test .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM php:5-apache
5-apache: Pulling from library/php
5e6ec7f28fb7: Pull complete
cf165947b5b7: Pull complete
7bd37682846d: Pull complete
99daf8e838e1: Pull complete
ae320713efba: Pull complete
ebcb99c48d8c: Pull complete
9867e71b4ab6: Pull complete
936eb418164a: Pull complete
bc298e7adaf7: Pull complete
ccd61b587bcd: Pull complete
b2d4b347f67c: Pull complete
56e9dde34152: Pull complete
9ad99b17eb78: Pull complete
Digest: sha256:0a40fd273961b99d8afe69a61a68c73c04bc0caa9de384d3b2dd9e7986eec86d
Status: Downloaded newer image for php:5-apache
 ---> 24c791995c1e
Step 2/3 : COPY index.php /var/www/html/index.php
 ---> 767e00d554d2
Step 3/3 : RUN chmod a+rx index.php
 ---> Running in 21c35da0e7dd
Removing intermediate container 21c35da0e7dd
 ---> 89226ef07d25
Successfully built 89226ef07d25
Successfully tagged hpa-test:latest

docker image push

$ docker tag hpa-test docker.hub.io/test/hpa-test

$ docker push docker.hub.io/test/hpa-test
The push refers to repository [docker.hub.io/test/hpa-test]
b08f7a13591f: Pushed
416faf6d334b: Pushed
1aab22401f12: Pushed
13ab94c9aa15: Pushed
588ee8a7eeec: Pushed
bebcda512a6d: Pushed
5ce59bfe8a3a: Pushed
d89c229e40ae: Pushed
9311481e1bdc: Pushed
4dd88f8a7689: Pushed
b1841504f6c8: Pushed
6eb3cfd4ad9e: Pushed
82bded2c3a7c: Pushed
b87a266e6a9c: Pushed
3c816b4ead84: Pushed
latest: digest: sha256:5a8b6cda514a3bd5e90ebf6038180afc7072e5f2c9cc95562949a55d8bca67b2 size: 3449

deployment 및 service 배포

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: hpa-test
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache

배포하기

$ kubectl apply -f deployment.yaml
deployment.apps/php-apache created

$ kubectl apply -f service.yaml
service/php-apache created

HPA 생성

다음 명령어를 사용해서 pod replicas를 1대에서 5대까지 scale 가능한 HPA를 생성한다. cpu 사용량은 70% 이상일 경우 scale out되도록 설정한다.

$ kubectl autoscale deployment php-apache --cpu-percent=70 --min=1 --max=5
horizontalpodautoscaler.autoscaling/php-apache autoscaled

$ kubectl get hpa
NAME                      REFERENCE                            TARGETS                        MINPODS   MAXPODS   REPLICAS   AGE
php-apache                Deployment/php-apache                10%/70%                        1         5         0          6s

부하 생성 (scale out)

busybox 이미지를 사용하여 생성된 service를 통해 pod에 부하를 준다.

kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

HPA가 정상적으로 동작하는지 확인

$ kubectl get hpa

NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   335% / 70%  1         5         1          3m

cpu 사용량이 증가하면서 pod replicas가 5대까지 scale out 되었다. deployment를 통해 확인 해보자.

$ kubectl get deploy php-apache
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   5/5     5            5           14m

cpu 사용량이 설정된 70%를 넘어감에 따라 pod이 MAXPODS인 5대까지 증설되었다.

부하 중지 (scale in)

부하 중지 후 서비스가 정상적으로 scale in이 되는지 확인해보자.

기존에 실행했던 부하 생성을 중지하기 위해 <Ctrl> + c 로 이전에 띄웠던 컨테이너를 중지 후 확인을 해본다.

$ kubectl get hpa
NAME                      REFERENCE                            TARGETS                        MINPODS   MAXPODS   REPLICAS   AGE
php-apache                Deployment/php-apache                0%/70%                         1         5         1          10m

deployment도 정상적으로 scale in 되었는지 확인 해본다.

$ kubectl get deploy php-apache
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   1/1     1            1           18m

cpu 사용량이 0%로 떨어졌으며 replicas의 개수도 MINPODS에 설정된 개수인 1대로 정상적으로 scale in이 되었다.

반응형
Posted by 사용자 guru_k

댓글을 달아 주세요

Kubernetes Service

Kubernetes 2021. 10. 8. 00:12

Kubernetes Pod은 각각 자신만의 IP를 할당 받으며, Pod의 생명주기는 매우 짧은 편입니다. 즉, Pod는 매우 빈번하게 삭제되거나 생성될 수 있으며 Pod은 생성될 때 IP를 할당 받고 삭제 이후 다시 Pod이 생성될 경우 새로운 IP를 할당 받게 됩니다.

이처럼 Pod의 IP는 빈번하게 변경되므로 stable한 IP가 필요한데 이 역할을 Service가 수행하게 됩니다.

Service Type에는 여러가지가 있지만 기본적인 타입은 고유의 Cluster IP를 가지며 이를 이용해서 Kubernetes 내부 혹은 외부에서 통신이 가능하게 됩니다.  

kubernetes Service는 기본적으로 selector로 선택된 app으로 트래픽을 전달하며 로드밸런싱 역할을 수행합니다.

apiVersion: v1
kind: Service
metadata:
  name: foo-service
spec:
  selector:                  
    app: foo
  ports:
  - port: 5000               
    protocol: TCP
    targetPort: 5000

위와 같이 Service를 생성할 수 있으며 foo-service를 통해 selector로 선택된 foo pod에 접근할 수 있습니다.

Kubernetes Service

foo-service를 생성 시 동일한 이름의 endpoints 가 생성이 되며 이 endpoints에 pod ip가 등록되어지며 새로운 pod이 생성 혹은 삭제 될 때 endpoints에 업데이트 됩니다.

Service Types

ClusterIP

kubernetes service의 default type으로 cluster 내부 ip 를 할당 받으며 cluster 내부에서 해당 service를 통해 pod으로 접근이 가능합니다.

NodePort

각 노드에 Port를 외부로 노출하여 외부로부터 노출된 Port로 접근이 가능하도록 합니다. 

Headless

로드밸런싱이 필요 없거나 싱글 서비스 IP가 필요하지 않을 경우 Headless type으로 Service를 구성할 수 있다. Cluster IP를 가지고 있지 않기 때문에 Headless type으로 설정된 Service를 호출 시 Pod IP를 직접 할당 받게 된다.

반응형

'Kubernetes' 카테고리의 다른 글

Kubernetes metrics-server  (0) 2021.10.14
Kubernetes HPA (Horizontal Pod Autoscaler)  (0) 2021.10.12
Kubernetes Service  (0) 2021.10.08
Kubernetes Components  (0) 2021.10.07
kubernetes를 이용한 cluster 구성 - 3  (0) 2018.03.16
[kubernetes] kubernetes를 이용한 cluster 구성 - 2  (0) 2018.03.10
Posted by 사용자 guru_k

댓글을 달아 주세요

Kubernetes Components

Kubernetes 2021. 10. 7. 00:39

기본적으로 Kubernetes cluster는 node 라고 불리는 일련의 워커 머신들로 이루어져있다. 그 노드 안에서 containerized 된 어플리케이션들이 실행된다.

Kubernetes Cluster

Kubernetes Components 는 크게 두가지로 볼 수 있다.

Control Plane Components 와 Node Components 이며 Control Plane은 클러스터에서 Pod 과 Worker Node들을 관리하는데 Production 환경에서 Control Plane은 fault-tolerance 와 high availability를 위해 여러 머신에 걸쳐 구동 되어진다.

 

Control Plane Components

Control Plane 들은 클러스터 내에서 발생하는 다양한 이벤트들을 결정하는 역할을 수행한다. 예로 새로운 Pod이 생성이 될 경우 어떤 Node에 뜨도록 할것인지에 대한 것을 결정하기도 한다.Control Plane 들은 아무 Node에서나 구동이 될 수 있지만 모든 Components들은 같은 머신에 구동되어지도록 설정하는 것이 좋다. 그리고 대게 Master Node에 구동이 되어지며 User Container들을 Control Plane들이 구동되어지는 Node에 구동하지 않도록 하자.

kube-apiserver

kube-apiserver는 kubernetes API를 노출하고 있는 Component이며 kubernetes control plane의 front end로 볼 수 있다.kube-apiserver의 주요 역할은 kubernetes API를 사용할 수 있도록 하는것이며 kube-apiserver는 수평적 확장이 가능한 구조로 디자인되어있어 여러 인스턴스를 구동하여 트래픽을 조절할 수 있다.

etcd

모든 클러스터의 Kubernetes' backing store 를 저장하는 용도로 사용하는 고가용성 Key Value store로 사용되어 진다.

kube-scheduler

kube-scheduler component 는 지정된 Node가 없는 새로운 Pod이 구동 될 경우 어떤 Node에서 해당 Pod이 구동될것인지에 대한 선택을 하게 된다.

kube-controller-manager

 kube-controller는 아래와 같이 네가지의 분리된 controller process로 구성되어있으나 복잡성을 줄이기 위해 하나의 바이너리로 구동되어진다.

  • Node controller: 노드가 다운되었을 때 대응을 담당
  • Job controller: Job object들을 감지하면서 해당 Job들이 완료될 수 있도록 Pod들을 생성
  • Endpoints controller: Endpoints object 들을 담당. Service와 Pod을 조인
  • Service Account & Token controllers: 새로운 네임스페이스들을 위한 기본 account들과 API access token들을 생성

Node Components

Node Component 들은 모든 Node에서 동작하며, Pod의 구동을 유지하며 kubernetes runtime environment를 제공한다.

kubelet

각 Cluster의 각 Node에서 실행되는 Agent이다. Container들이 Pod안에서 확실히 실행될 수 있도록 관리한다

다양한 메카니즘을 통해 제공된 PodSpecs들을 제공 받아서 PodSpecs에서 서술된 Container들의 running과 healthy를 확실하게 관리한다.

그러나 kubernetes에 의해 만들어지지 않은 container들은 관리하지 않는다.

kube-proxy

kube-proxy는 각 노드에서 kubernetes service concept로 실행되는 network proxy 이다.

kube-proxy는 각 노드에서 네트워크 룰들을 관리하고, 이러한 네트워크 룰들은 클러스터 내외부의 네트워크 세션으로부터 발생하는 커뮤니케이션이 허용되도록 한다.

kube-proxy는 OS Layer의 Packet filtering이 존재하면 그것을 사용하며 없을 경우 트래픽 자체를 포워드 한다.

Container runtime

container runtime은 container들을 실행을 담당하는 소프트웨어이다.

kubernetes는 몇몇의 container runtime들을 지원하며. Docker, containerd, CRI-O 그리고 Kubernetes CRI를 구현한 소프트웨어들이 해당한다.

반응형
Posted by 사용자 guru_k

댓글을 달아 주세요

kubernetes를 이용한 cluster 구성 - 3 

Master init

config 파일을 통해 상세한 설정이 가능하다.


kubeadmin.config.yml  생성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# cat <<EOF >kubeadm.config.yaml
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
api:
  advertiseAddress: 192.168.128.88            // master ip
etcd:
  image: google_containers/etcd-amd64:3.1.11  // etcd image repository path
kubeProxy:
  bindAddress: 192.168.128.88                 // master ip
networking:
  serviceSubnet: 192.96.0.0/12                // service subnet cdir
  podSubnet: 192.244.0.0/16                   // pod subnet cdir
kubernetesVersion: v1.9.2
imageRepository: google_containers            // image repository path
EOF
cs

kubeadm init

master node init

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ kubeadm init --config kubeadm.config
  
Your Kubernetes master has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
  mkdir -p $HOME/.kube
  sudo cp -/etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
 
You can now join any number of machines by running the following on each node
as root:
 
  kubeadm join --token 3bbb24.47cc21d7d6e88360 192.168.128.88:6443 --discovery-token-ca-cert-hash sha256:322efe09538cb8a1656069da216b46aa7de03eec9b00f990599d1d4e19113dba
  
cs


root 가 아닌 유저가 kubectl을 사용하기 위해선 아래와 같은 커맨드를 실행해야 한다.

1
2
3
$ mkdir -p $HOME/.kube
$ sudo cp -/etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
cs


또한 kubeadm init 을 통해 생성된 join 명령어를 통해 각 node에서 마스터로 join할 수 있다.


1
2
 
  kubeadm join --token 3bbb24.47cc21d7d6e88360 192.168.128.88:6443 --discovery-token-ca-cert-hash sha256:322efe09538cb8a1656069da216b46aa7de03eec9b00f990599d1d4e19113dba
cs


반응형
Posted by 사용자 guru_k

댓글을 달아 주세요

kubernetes를 이용한 cluster 구성 - 2

kubernetes cluster 구성을 위해 필요한 Docker 와 Kubernetes 설치 및 설정에 대하여 진행 하겠습니다.


모든 구성은 ubuntu 16.04.4 LTS 환경에서 진행하였습니다.

docker 설치

1
2
3
4
5
6
7
8
9
10
11
12
 # Docker Installation
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
  
curl --insecure -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
 
 # Docker authority
sudo usermod -aG docker $USER
cs

 Kubernetes 는 docker container를 실행하기 때문에 docker를 설치해야합니다.


Kubernetes 설치


1
2
3
4
5
# Kubernetes Installation
sudo curl --insecure -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
sudo echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl kubernetes-cni
cs



초기 설정

swap off (all node)

kubernetes의 문서를 살펴보면 모든 node의 swap을 off 해야 합니다. 그렇지 않으면 kubelet 실행이 실패할 수 있습니다.
 
1
2
3
# Swap Off
# vi /etc/fstab   # /etc/fstab에서 swap 을 완전히 off 합니다.
sudo swapoff -a   # swapoff
cs



set ipv4.ip_forward (master node)


ipv4.ip_forward를 사용하기 위해 master에 한해서 ipv4.ip_forward를 활성화 합니다.

1
2
3
4
#ipv4.ip_forward 설정 확인
cat /etc/sysctl.conf | grep "net.ipv4.ip_forward"
#net.ipv4.ip_forward=1 이 주석처리 되어있다면 주석을 풀어준 후
sysctl -p  # reload
cs



반응형
Posted by 사용자 guru_k

댓글을 달아 주세요

Kubernetes, 또는 쿠버네티스, 또는 간단히 "큐브(kube)"는 Linux 컨테이너 작업을 자동화하는 오픈소스 플랫폼입니다.


Kubernetes를 이용하여 클러스터 구성을 진행하는 내용을 포스트 하려고 합니다.


Kubernetes에 대한 자세한 내용은 

https://kubernetes.io/docs/reference/ Kubernetes 홈페이지에서 확인할 수 있습니다.


이 cluster 구성 예제는 실제 물리머신 3대에 노드를 제어하는 마스터 1대, 노드 2대로 구성한다고 가정하고 진행 할 예정입니다.


머신이 한대인 local 환경에서 테스트는 Kubernetes에서 제공하는 Minikube를 이용해서 테스트 해볼 수 있습니다.


Minikube에 대한 내용은 아래 홈페이지에서 확인하고 진행해볼 수 있습니다.

https://kubernetes.io/docs/getting-started-guides/minikube/




반응형
Posted by 사용자 guru_k

댓글을 달아 주세요