Kubernetes #4-3. Kubernetes 클러스터 구축 – worker node join (offline, 폐쇄망)

[Kubernetes #1. 사전작업 (offline, 폐쇄망)]
[Kubernetes #2-2. 사전작업 – 컨테이너 런타임 (offline, 폐쇄망)]
[Kubernetes #2-2. 사전작업 – docker 설정 (offline, 폐쇄망)]
[Kubernetes #3. Kubernetes 바이너리 설치 (offline, 폐쇄망)]
[Kubernetes #4. Kubernetes 클러스터 구축 – image pull (offline, 폐쇄망)]
[Kubernetes #4-2. Kubernetes 클러스터 구축 – 단일 마스터노드 생성 (offline, 폐쇄망)]
[Kubernetes #4-3. Kubernetes 클러스터 구축 – worker node join (offline, 폐쇄망)]

Worker node cluster join

Dockerkubernetes 구성 요소를 설치한 뒤 이전 포스트에서 cluster 초기화 시 생성된 스크립트를 실행하면 worker node로써 설정이 된다.

kubeadm join 192.168.4.78:6443 --token abcdefg.8rpr4mfmetbabcde --discovery-token-ca-cert-hash sha256:3a12345caaef12334567890cd3953d1234c3904ab70a8b949f32d6df12345

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

worker 노드에서도 kubernetes config 관련 명령을 수행해주면 kubectl 명령을 이용할 수 있다.

kubectl get nodes

NAME       STATUS     ROLES                  AGE    VERSION
centos7    NotReady   control-plane,master   104s   v1.23.5
centos71   NotReady   <none>                 36s    v1.23.5

master node 설정 후 확인한 것과 같이 STAUS는 NotReady 상태로 표시된다. 이는 kubernetes 네트워크 관련 배포가 필요한 것으로 이후 관련 인스턴스를 배포하면 Ready 상태로 표시된다.

 

cluster 생성 후 24시간 경과 시

kubeadm init 수행 시 생성된 join 스크립트의 token은 24시간의 만료 시간을 가진다. 즉 24시간이 지나면 생성된 join script, 정확히 말하자면 token이 만료되어 사용이 불가능하다.

따라서 24시간 이후에는 갱신된 token을 확인하고 새 token을 이용한 join 스크립트를 사용해야 한다.

  • token 확인: TTL(Time To Live) 값을 보면 22h시간 사용가능함을 알 수 있다.
kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
abcdef.2zha2oqwp12abcd1   22h         2022-04-08T00:46:45Z   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
  • 해당 token에 해당하는 sha256 값 확인
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
871c73bfcb0d0421f029faa7ba07201abf4f00abcdefghijklmnopqrstuvwxyz
  • 확인된 token, 과 sha256 값을 이용하여 join 명령을 수행한다.
kubeadm join 192.168.4.78:6443 --token abcdef.2zha2oqwp12abcd1 --discovery-token-ca-cert-hash sha256:871c73bfcb0d0421f029faa7ba07201abf4f00abcdefghijklmnopqrstuvwxyz

 

 

 

Openstack #2-1 개념 아키텍쳐

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd

openstack 모듈간 architecture 는 그림처럼 이해하면 쉽다.

하나의 가상 머신이 생성된다고 하면
– Novas는 Hypervisor로써 coumpute 노드로 설정된 노드들의 CPU와 RAM에 연결된다.
– Neutron은 네트워크 노드로 설정된 노드들의 네트워크 인터페이스와 연결된다.
– Cinder는 블록스토리지로 스토리지 노드들의 HDD(SSD 등)과 연결된다.
기본적으로 이 세 개의 모듈이 노드들의 자원을 획득하고 하나의 가상머신에 자원이 된다.

Glance와 Swift는 가상머신과 직접 연결되지 않는 것을 알 수 있는데 이는 Cinder와 달리 두 서비스는 가상머신에 가상디바이스를 직접 제공하지 않기 때문이다.

Horizon은 사용자가 openstack과 소통하기 위한 창구다. 웹 UI와 CLI를 제공한다.
Keystone은 사용자와 모듈을 식별한다.

Openstack #1-6 Etcd

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd

etcd(잇시디)는 머신의 분산된 시스템 또는 클러스터의 설정 공유, 서비스 검색 및 스케줄러 조정을 위한 일관된 오픈소스, 분산형 키-값(key-value) 저장소이다.

컨트롤러 노드에서 수행한다.

패키지 설치

[root@openstack1:~]#yum install -y etcd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
updates                                                                                                                                                                                                                     | 2.9 kB  00:00:00
Package etcd-3.3.11-2.el7.centos.x86_64 already installed and latest version
Nothing to do

설정

[root@openstack1:~]#vi /etc/etcd/etcd.conf
 # 모두 지우고 아래 내용을 붙여넣는다.
 # IP 주소는 각자 상황에 맞게 변경 해줘야 한다.
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
 # peer 연결을 받을 IP
ETCD_LISTEN_PEER_URLS="http://192.168.103.146:2380"
 # 클라이언트 연결을 받을 IP
ETCD_LISTEN_CLIENT_URLS="http://192.168.103.146:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.103.146:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.103.146:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.103.146:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"

서비스 등록 및 시작

[root@openstack1:~]#systemctl enable etcd
[root@openstack1:~]#systemctl start etcd

Openstack #1-5 Memcached

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd

Memcached (멤캐시디, 멤캐시트)는 범용 분산 캐시 시스템이다. 외부 데이터 소스(예: 데이터베이스나 API)의 읽기 횟수를 줄이기 위해 데이터와 객체들을 RAM에 캐시 처리함으로써 동적 데이터베이스 드리븐 웹사이트의 속도를 높이기 위해 종종 사용된다. Memcached는 BSD 허가서로 라이선스되는 자유-오픈 소스 소프트웨어이다.

controller 노드에서 수행한다.

패키지 설치

[root@openstack1:~]#yum -y install memcached python-memcached
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Package memcached-1.5.6-1.el7.x86_64 already installed and latest version
Package python-memcached-1.58-1.el7.noarch already installed and latest version
Nothing to do

설정 변경

# /etc/sysconfig/memcached
 # OPTIONS="-l 127.0.0.1,::1" 부분을 수정한다.
OPTIONS="-l 127.0.0.1,::1,controller" 

서비스 등록 및 시작

[root@openstack1:~]#systemctl enable memcached.service
[root@openstack1:~]#systemctl start memcached.service

Openstack #1-4 MessageQueue(RabbitMQ)

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd

RabbitMQ는 오픈 소스 메시지 브로커 소프트웨어(메시지 지향 미들웨어)로서, AMQP를 구현하였으며 그 이후로 STOMP ,MQTT 등의 프로토콜을 지원하기 위해 플러그인 구조와 함께 확장되고 있다. 메시지를 생산하는 생산자(Producer)가 메시지를 큐에 저장해 두면, 메시지를 수신하는 소비자(Consumer)가 메시지를 가져와 처리하는 Publish/Subscribe 방식의 메시지 전달 브로커이다.

rabbitmq 서버는 controller 노드에만 설치한다.

패키지 설치

[root@openstack1:~]#yum -y install rabbitmq-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Package rabbitmq-server-3.6.16-1.el7.noarch already installed and latest version
Nothing to do

서비스 등록 및 구동

[root@openstack1:~]#systemctl enable rabbitmq-server.service
[root@openstack1:~]#systemctl start rabbitmq-server.service
 # 또는
[root@openstack1:~]#chkconfig rabbitmq-server on
알림: 'systemctl enable rabbitmq-server.service'에 요청을 전송하고 있습니다.
[root@openstack1:~]#service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service

사용자(계정) 생성

# rabbitmqctl add_user ACCOUNT PASSWORD
[root@openstack1:~]# rabbitmqctl add_user openstack openstack
Creating user "openstack"
 # 기존 사용자를 삭제하려면 add_user 대신 delete_user명령을 사용하면 된다.

권한 부여

[root@openstack1:~]#rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"

Openstack #1-2 MariaDB(MySQL) 설치

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd


공용 repository로 사용되는 RDBMS가 필요하다. Mysql, MariaDB, PostgresQL을 리포지터리로 사용할 수 있다.
MySQL설치 포스트를 참고해서 설치 할 수 있다.

Controller 노드에서만 수행한다. 또는 별도의 DB서버에서만 수행한다.

서버 설치

[root@openstack1:~]# yum -y install mariadb mariadb-server python2-PyMySQL
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Package 3:mariadb-server-10.3.10-1.el7.0.0.rdo2.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package python2-PyMySQL.noarch 0:0.9.2-2.el7 will be installed
  Verifying  : python2-PyMySQL-0.9.2-2.el7.noarch                                                                                                                                                                                              1/1
Installed:
  python2-PyMySQL.noarch 0:0.9.2-2.el7
Complete!

클라이언트 및 관련 라이브러리 설치
서버를 제외한 나머지 노드에서 수행한다.

  yum -y install mariadb  python2-PyMySQL

config 변경

 # /etc/my.cnf 파일을 수정해도 된다.
[root@openstack1:~]# /etc/my.cnf.d/openstack.cnf 
 # openstack.cnf 파일은 빈파일이다.
 # 아래 내용을 붙여넣는다.
[mysqld]
 #bind-address를 주석처리 하면 기본 값으로 설정된다.
bind-address = 서버_IP

default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

서비스 활성화

 # Service 시작
[root@openstack1:~]#service mariadb start
Redirecting to /bin/systemctl start mariadb.service
[root@openstack1:~]#chkconfig mariadb on
알림: 'systemctl enable mariadb.service'에 요청을 전송하고 있습니다.
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

 # 또는 
[root@openstack1:~]# systemctl enable mariadb.service
[root@openstack1:~]# systemctl start mariadb.service

Openstack #1-1 선행작업

Packstack과는 다르다. packstack 설치 과정과는 분리해서 생각하자.

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd

이런 구성에서 설치를 진행한다고 가정한다. 왼쪽부터 호스트명은 openstack1 ~ 4

모든 노드에서 아래 작업을 수행한다.

네트워크 인터페이스 설정을 마친다.

기본적으로 CentOS extra 저장소는 openstack 저장소 활성화를 위한 rpm을 포함하고 있다. 그러니까 별도의 yum repository 설정을 한다거나 할 필요가 없다는 이야기이다.
오픈스택은 매 6개월마다 릴리즈된다. 버전은 알파멧 순서로 매겨진다. 여기에서 확인할 수있다.

오픈스택 저장소 활성화

 # 예제의 경우 stein 이 버전이다. 
[root@openstack1:~]# yum -y install centos-release-openstack-stein
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package centos-release-openstack-stein.noarch 0:1-1.el7.centos will be installed
--> Processing Dependency: centos-release-qemu-ev for package: centos-release-openstack-stein-1-1.el7.centos.noarch
...중략...
  Verifying  : centos-release-qemu-ev-1.0-4.el7.centos.noarch                                                                                                                                                                                  6/6
Installed:
  centos-release-openstack-stein.noarch 0:1-1.el7.centos
Dependency Installed:
  centos-release-ceph-nautilus.noarch 0:1.2-2.el7.centos        centos-release-nfs-ganesha28.noarch 0:1.0-3.el7.centos        centos-release-qemu-ev.noarch 0:1.0-4.el7.centos        centos-release-storage-common.noarch 0:2-2.el7.centos
  centos-release-virt-common.noarch 0:1-1.el7.centos

Complete!

yum 패키지 업그레이드

[root@openstack1:~]#yum -y upgrade
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
centos-ceph-nautilus                                                                                                                                                                                                        | 3.0 kB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.18.8-1.el7 will be updated
...중략...
  Verifying  : nss-util-3.44.0-4.el7_7.x86_64                                                                                                                                                                                                99/99
Installed:
  kernel.x86_64 0:3.10.0-1160.11.1.el7
Dependency Installed:
  mariadb-common.x86_64 3:10.3.10-1.el7.0.0.rdo2                   mariadb-config.x86_64 3:10.3.10-1.el7.0.0.rdo2                   mariadb-errmsg.x86_64 3:10.3.10-1.el7.0.0.rdo2                   psmisc.x86_64 0:22.20-17.el7
Updated:
  selinux-policy-targeted.noarch 0:3.13.1-268.el7_9.2  systemd.x86_64 0:219-78.el7_9.2                  systemd-libs.x86_64 0:219-78.el7_9.2          systemd-sysv.x86_64 0:219-78.el7_9.2            tuned.noarch 0:2.11.0-10.el7
  tzdata.noarch 0:2020d-2.el7                          vim-minimal.x86_64 2:7.4.629-8.el7_9
Complete!

Openstack 클라이언트 설치

[root@openstack1:~]#yum -y install python-openstackclient
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package python2-openstackclient.noarch 0:3.18.1-1.el7 will be installed
--> Processing Dependency: python-openstackclient-lang = 3.18.1-1.el7 for package: python2-openstackclient-3.18.1-1.el7.noarch
...중략...
  Verifying  : python2-pbr-5.1.2-2.el7.noarch                                                                                                                                                                                                87/87
Installed:
  python2-openstackclient.noarch 0:3.18.1-1.el7
Dependency Installed:
  python2-subprocess32.x86_64 0:3.2.6-14.el7           python2-urllib3.noarch 0:1.24.1-3.el7                     python2-wcwidth.noarch 0:0.1.7-8.el7                        python2-wrapt.x86_64 0:1.11.1-1.el7
  pytz.noarch 0:2016.10-2.el7                          rsync.x86_64 0:3.1.2-10.el7
Complete!

Openstack SElinux 패키지 설치 (보안 정책 자동 관리)

[root@openstack1:~]#yum -y install openstack-selinux
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package openstack-selinux.noarch 0:0.8.18-1.el7 will be installed
--> Processing Dependency: container-selinux for package: openstack-selinux-0.8.18-1.el7.noarch
...중략...
  Verifying  : setools-libs-3.3.8-4.el7.x86_64                                                                                                                                                                                                 9/9
Installed:
  openstack-selinux.noarch 0:0.8.18-1.el7
Dependency Installed:
  audit-libs-python.x86_64 0:2.8.5-4.el7 checkpolicy.x86_64 0:2.5-8.el7    container-selinux.noarch 2:2.119.2-1.911c772.el7_8 libcgroup.x86_64 0:0.41-21.el7 libsemanage-python.x86_64 0:2.5-14.el7 policycoreutils-python.x86_64 0:2.5-34.el7
  python-IPy.noarch 0:0.75-6.el7         setools-libs.x86_64 0:3.3.8-4.el7
Complete!

캐릭터 셋 변경

/etc/profile 혹은 /root/.bash_profile을 수정한다.
– /etc/profile : 모든 사용자에 적용된다. 어떤 계정이건 bash가 실행 될 때 파일을 읽는다.
– /root/.bash_profile : root 계정에 적용된다.
– /home/계정명/.bash_profile : 해당 계정에 적용된다.

[root@openstack1:~]#    vi /etc/profile
 # 파일 끝에 아래를 붙여넣는다.

# shell prompt를 보기 편하게 하기 위한 설정. 
export PS1="[\[\033[38;5;45m\]\u@\[$(tput sgr0)\]\[\033[38;5;15m\]\h:\w]\\$\[$(tput sgr0)\]"
# 만약 vim이 설치돼 있지 않다면 아래 라인은 주석처리하거나, vim을 설치해야 한다.
alias vi=vim

#영문, UTF8로 설정
LANG=en_US.utf-8
LC_ALL=en_US.utf-8