컨트롤러 노드에서 진행
※ magnum을 설치하기 이전에 먼저 heat를 설치해야함
공식문서에서 추가적으로 제안하는 설치옵션
옵션1. Octavia(LbassS_v2) : multiple master cluster를 위한
옵션2. Ironic: 베어메탈 클러스터를 위한
옵션3. Swift: 유저가 private 도커 저장소 사용하기 하기위한
옵션4. Ceilometer: cluster의 metrix 지표를 전송하기 위한
옵션5. barbican: 보안을 위한
밑에 나오는 magnum.conf는 위의 설치옵션은 설치되어있지 않다고 가정한 설정 값들입니다.
$ mysql
> CREATE DATABASE magnum;
> GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'localhost' IDENTIFIED BY 'a';
> GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'%' IDENTIFIED BY 'a';
> quit
# 유저 생성 및 admin 권한 부여 및 프로젝트 연결
$ openstack user create --domain default --password-prompt magnum # 비밀번호 a
$ openstack role add --project service --user magnum admin
# 서비스 추가
$ openstack service create --name magnum --description "OpenStack Container Infrastructure Management Service" container-infra
# API 엔드포인트 추가
$ openstack endpoint create --region RegionOne container-infra public <http://172.0.0.4:9511/v1>
$ openstack endpoint create --region RegionOne container-infra internal <http://controller:9511/v1>
$ openstack endpoint create --region RegionOne container-infra admin <http://controller:9511/v1>
# 매그넘 서비스는 COE 클러스터를 관리하기 위해 Identity 서비스에 추가 정보 필요
$ openstack domain create --description "Owns users and projects created by magnum" magnum
$ openstack user create --domain magnum --password-prompt magnum_domain_admin # 비밀번호 a
$ openstack role add --domain magnum --user-domain magnum --user magnum_domain_admin admin
# 확인
$ openstack user list #[magnum, magnum_domain_admin]
$ openstack service list | grep magnum
$ openstack endpoint list | grep magnum
$ openstack domain list | grep magnum
$ DEBIAN_FRONTEND=noninteractive apt-get install magnum-api magnum-conductor python3-magnumclient
$ cp /etc/magnum/magnum.conf /etc/magnum/magnum.conf.org
$ grep -E '^[^#].' /etc/magnum/magnum.conf.org > /etc/magnum/magnum.conf
$ vi /etc/magnum/magnum.conf
[DEFAULT]
transport_url = rabbit://openstack:a@controller
[api]
host = 172.0.0.4 # 172영역의 ip
[certificates]
cert_manager_type = x509keypair,barbican # 택1 (바비칸 설치가 안되있다면 x509keypair)
[cinder_client]
region_name = RegionOne
[database]
connection = mysql+pymysql://magnum:a@controller/magnum
[keystone_authtoken]
memcached_servers = controller:11211
auth_version = v3
www_authenticate_uri = <http://controller:5000/v3>
project_domain_id = default
project_name = service
user_domain_id = default
password = a
username = magnum
auth_url = <http://controller:5000>
auth_type = password
admin_user = magnum
admin_password = a
admin_tenant_name = service
[trust]
trustee_domain_name = magnum
trustee_domain_admin_name = magnum_domain_admin
trustee_domain_admin_password = a
trustee_keystone_interface = public, internal # 택1 (public 권장)
cluster_user_trust = True
[oslo_messaging_notifications]
driver = messaging
# metrix 정보를 Ceilometer 주기적으로 보내는 옵션으로 Ceilometer 설치가 안됬으면 false
[drivers]
send_cluster_metrics = False
# DB insert
$ su -s /bin/sh -c "magnum-db-manage upgrade" magnum
$ service magnum-api restart
$ service magnum-conductor restart
$ service magnum-api status
$ service magnum-conductor status
# 검증1
$ openstack coe service list
+----+------+------------------+-------+----------+-----------------+---------------------------+---------------------------+
| id | host | binary | state | disabled | disabled_reason | created_at | updated_at |
+----+------+------------------+-------+----------+-----------------+---------------------------+---------------------------+
| 1 | None | magnum-conductor | up | False | None | 2022-12-07T07:55:59+00:00 | 2022-12-07T07:55:59+00:00 |
+----+------+------------------+-------+----------+-----------------+---------------------------+---------------------------+
호라이즌에 magnum ui 추가 (ubuntu version: 22.04 LTS server, openstack version: 제드)
$ apt install python3-magnum-ui
$ vi /etc/openstack-dashboard/local_settings.py
# 추가
ENABLE_MAGNUM_UI = True
MAGNUM_URL = "<http://controller:9511/v1>"
# 변경
COMPRESS_OFFLINE = False # True에서 False로 변경
$ service apache2 restart
트러블슈팅 (ubuntu version: 22.04 LTS server, openstack version: 제드)
1. cluster 탬플릿 생성 시 labels에 container_runtime을 containerd로 설정 할 경우
cluster 생성시 Pod들이 creating 상태에서 stuck됨
1. 해결방안
$ vi /usr/lib/python3/dist-packages/magnum/drivers/common/templates/kubernetes/fragments/install-cri.sh
$ssh_cmd systemctl disable docker.service docker.socket
$ssh_cmd systemctl stop docker.service docker.socket
# 추가 (참조하는 파일을 바꿔줘야함)
if $ssh_cmd [ -f /etc/containerd/config.toml ] ; then
$ssh_cmd sed -i 's/bin_dir.*$/bin_dir\\ =\\ \\""\\/opt\\/cni\\/bin\\/"\\"/' /etc/containerd/config.toml
fi
2. cluster 생성 시 api connection이 제대로 안될 경우
2. 해결방안
-> heat.conf에서 controller를 ip로 변경
-> 클러스터 설치 시 필요한 정보를 얻을 때 컨트롤러 노드의 API 주소로
요청을 날리는데 controller가 상수로 박혀있어 API 요청이 제대로 이뤄지지 않음
클러스터 탬플릿 생성 시 유용한 labels
1. metrics_server_enabled=true [default:true] // metrix 서버 활성화 여부
2. kube_dashboard_enabled=true [default:true] // 쿠버네티스 대쉬보드 활성화 여부
3. monitoring_enabled=true [default:false] // 프로메테우스 활성화 여부
monitoring_enabled이 true로 설정되면 trueMagnum은 Kubernetes 클러스터에 Prometheus Operator를
자동으로 배포하고 클러스터와 해당 애플리케이션을 모니터링하도록 구성합니다.
Prometheus Operator는 Kubernetes 클러스터에서 Prometheus를 쉽게 배포, 관리 및 확장할 수 있게
해주는 Kubernetes 네이티브 애플리케이션입니다.
Magnum 클러스터 템플릿에서 prometheus_alert_rules및 와 같은 추가 구성 옵션을 제공하여
Prometheus 모니터링 시스템을 추가로 구성할 수 있습니다 . prometheus_scrape_configs이러한
옵션을 사용하면 특정 모니터링 요구 사항을 충족하도록 Prometheus 구성을 지정할 수 있다.
4. container_runtime=containerd [default:docker] // 컨테이너 런타임 변경
5. cloud_provider_enabled=true [defualt:false] // 오픈스택 ciner를 사용하면 true로 설정
6. kube_tag=v1.24.3 // 일단 default로 사용
제드에서 default는 v1.23.3인데 쿠버네티스 버전 변경을 위해서 kube_tag 값 변경도 해보고
다른 여러가지 옵션들을 조합해보았지만 실패...
7. cinder_csi_enabled=true // Cinder 서비스의 CSI 드라이버 사용
provider, private 네트워크 생성
# provider 네트워크 생성 (cli)
$ openstack network create --share --external \\
--provider-physical-network provider \\
--provider-network-type flat provider
# provider 서브넷
$ openstack subnet create --network provider \\
--allocation-pool start=172.0.0.10,end=172.0.0.240 \\
--dns-nameserver 8.8.8.8 --gateway 172.0.0.1 \\
--subnet-range 172.0.0.0/24 provider-subnet
# 확인
$ openstack network list
$ openstack subnet list
# private 네트워크 생성 (호라이즌)
1. 네트워크, 서브넷 이름 예시) private, private-subnet
2. 네트워크 주소 예시) 10.11.12.0/24
3. 게이트웨이 주소 예시) 10.11.12.1
# 라우터 생성
1. 외부 네트워크 선택: provider(172 영역대)
2. 라우터 클릭 후 private 네트워크와 연결
# iptime 설정
1. iptime admin 사이트로 접속 후 admin 접속 후 -> "라우팅 테이블 관리" 이동
2. 10.11.12.0/24로 들어오면 아까 생성한 라우터의 외부 게이트웨이 ip로 라우팅
쿠버네티스용 이미지 생성
### 컨트롤러 노드의 cli에서 진행 ###
# 매그넘 쿠버네티스용 fedora-coreos35 (Atomic의 후속버전, os_distro='fedora-coreos')
$ wget <https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/35.20220424.3.0/x86_64/fedora-coreos-35.20220424.3.0-openstack.x86_64.qcow2.xz>
$ xz -dv fedora-coreos-35.20220424.3.0-openstack.x86_64.qcow2.xz
$ openstack image create Fedora-CoreOS-35 \\
--file=fedora-coreos-35.20220424.3.0-openstack.x86_64.qcow2 \\
--disk-format=qcow2 \\
--container-format=bare \\
--property os_distro='fedora-coreos' \\
--public
# 매그넘 쿠버네티스용 fedora-coreos37 (Atomic의 후속버전, os_distro='fedora-coreos')
<https://getfedora.org/en/coreos/download?tab=cloud_operators&stream=stable&arch=x86_64>
$ openstack image create Fedora-CoreOS-37 \\
--disk-format=qcow2 \\
--container-format=bare \\
--file=fedora-coreos-37.20230122.3.0-openstack.x86_64.qcow2 \\
--property os_distro='fedora-coreos' \\
--public
# atomic은 이제 사용안함
# 매그넘 쿠버네티스용 fedora-Atomic 이미지 (os_distro='fedora-atomic')
$ wget <https://download.fedoraproject.org/pub/alt/atomic/stable/Fedora-Atomic-27-20180419.0/CloudImages/x86_64/images/Fedora-Atomic-27-20180419.0.x86_64.qcow2>
$ openstack image create \\
--disk-format=qcow2 \\
--container-format=bare \\
--file=Fedora-Atomic-27-20180419.0.x86_64.qcow2\\
--property os_distro='fedora-atomic' \\
Fedora-Atomic-27
# 확인
$ openstack image list
클러스터 생성 및 kubectl 연결
# 클러스터 탬플릿 생성
$ openstack coe cluster template create kubernetes-template \\
--image Fedora-CoreOS-35 \\
--fixed-network private \\
--fixed-subnet private-subnet \\
--external-network provider \\
--dns-nameserver 8.8.8.8 \\
--master-flavor m1.small \\
--flavor m1.small \\
--coe kubernetes \\
--network-drive calico \\
--volume-driver cinder \\
--docker-volume-size 10 \\
--docker-storage-driver overlay2 \\
--public \\
# 클러스터 생성
$ openstack coe cluster create kubernetes-cluster \\
--cluster-template kubernetes-cluster-template \\
--master-count 1 \\
--node-count 2 \\
--timeout 60 \\
--keypair mykey
# 클러스터 탬플릿 확인
$ openstack coe cluster template list
# 클러스터 확인
$ openstack coe cluster show kubernetes-cluster
# 생성 체크포인트 확인
$ openstack stack list --nested | grep kubernetes-cluster
$ openstack stack resource list ...
$ openstack stack resource show ...
# kubectl 연결
$ snap install kubectl --classic
$ openstack coe cluster list
$ openstack coe cluster show kubernetes-cluster
$ mkdir -p ~/clusters/kubernetes-cluster
$ openstack coe cluster config kubernetes-cluster --dir ~/clusters/kubernetes-cluster
$ export KUBECONFIG=/root/clusters/kubernetes-cluster/config
$ kubectl get nodes
$ kubectl get pods -n kube-system
# 쿠버네티스 검증
$ kubectl create deployment nginx --image=nginx
$ kubectl get pods -o wide
$ kubectl expose deployment nginx --type="NodePort" --port 80
$ kubectl get services nginx
$ curl localhost:[port]
'Openstack' 카테고리의 다른 글
오픈스택: octavia (0) | 2023.04.10 |
---|---|
오픈스택: heat (0) | 2023.04.10 |
9. 오픈스택: compute 추가 (0) | 2023.04.06 |
8. 오픈스택: cinder(블록 스토리지) 설치(2) (0) | 2023.04.06 |
7. 오픈스택: cinder(블록 스토리지) 설치(1) (0) | 2023.04.06 |
댓글