Helm 차트를 사용하여 고가용성을 갖춘 멀티노드 Contrail OpenStack Ocata 프로비저닝
Contrail 릴리스 1912.L1부터 Contrail Networking에서 Helm 지원을 사용할 수 없습니다. 이 문서의 Helm 지원 내용은 Contrail Networking 릴리스 1907부터 1912년을 지원합니다.
다음은 Helm 차트를 사용하여 OpenStack Ocata 및 고가용성을 갖춘 멀티노드 Contrail 시스템을 프로비저닝하기 위한 설치 절차입니다.
Contrail Command는 Helm 배포 Contrail 클러스터에서 지원되지 않습니다.
시스템 사양
이 절차에서는 주니퍼 OpenStack Helm 인프라와 OpenStack Helm 리포지토리를 사용하여 OpenStack Ocata Contrail 멀티노드 구축을 프로비저닝합니다.
이 절차는 다음으로 테스트됩니다.
운영 체제 : 우분투 17.03.2 LTS
커널: 4.4.0-112-generic
도커: 1.13.1-cs9
투구: v2.7.2
쿠버네티스: v1.9.3
OpenStack: Ocata
지원되는 플랫폼 목록은 https://www.juniper.net/documentation/en_US/release-independent/contrail/topics/reference/contrail-supported-platforms.pdf 을 참조하십시오.
설치 준비
이 섹션은 OpenStack Ocata 및 고가용성을 갖춘 멀티노드 Contrail을 프로비저닝하기 전에 시스템을 준비하는 데 필요한 전제 조건입니다.
마스터 노드에서 SSH 키를 생성하고 모든 노드에 복사하며, 아래 예에서는 IP 주소가 10.13.82.43, 10.13.82.44 및 10.13.82.45인 3개의 노드가 사용됩니다.
(k8s-master)> ssh-keygen (k8s-master)> ssh-copy-id -i ~/.ssh/id_rsa.pub 10.13.82.43 (k8s-master)> ssh-copy-id -i ~/.ssh/id_rsa.pub 10.13.82.44 (k8s-master)> ssh-copy-id -i ~/.ssh/id_rsa.pub 10.13.82.45
NTP가 모든 노드에 구성되어 있고 각 노드가 사용자 환경의 시간 서버와 동기화되어 있는지 확인합니다. 아래 예에서 NTP 서버 IP는 "10.84.5.100"입니다.
(k8s-all-nodes)> ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *10.84.5.100 66.129.255.62 2 u 15 64 377 72.421 -22.686 2.628
contrail-helm-deployer를 가져옵니다.
주니퍼 네트웍스에서 프로비저닝 호스트로 다운로드합니다
contrail-helm-deployer-5.1.0-0.38.tgz
.scp contrail-helm-deployer-5.1.0-0.38.tgz
클러스터의 모든 노드에.모든 노드에서 contrail-helm-deployer-5.1.0-0.38.tgz의 압축을 풉니다.
tar -zxf contrail-helm-deployer-5.1.0-0.38.tgz -C /opt/
필요한 변수를 내보냅니다.
(k8s-master)> cd /opt (k8s-master)> export BASE_DIR=$(pwd) (k8s-master)> export OSH_PATH=${BASE_DIR}/openstack-helm (k8s-master)> export OSH_INFRA_PATH=${BASE_DIR}/openstack-helm-infra (k8s-master)> export CHD_PATH=${BASE_DIR}/contrail-helm-deployer
필요한 패키지를 설치하고 쿠버네티스를 배포한다.
참고:다른 버전의 Kubernetes, CNI 또는 Calico를 설치하려면 의 기본값
${OSH_INFRA_PATH}/tools/gate/playbooks/vars.yaml
을 재정의하도록 편집${OSH_INFRA_PATH}/tools/gate/devel/local-vars.yaml
합니다.(k8s-master)> cd ${OSH_PATH} (k8s-master)> ./tools/deployment/developer/common/001-install-packages-opencontrail.sh
Ansible 기본 프로비저닝을 위해 마스터 노드에 인벤토리 파일을 생성합니다. 다음 출력에서 10.13.82.43/.44/.45는 노드의 IP 주소이며 1단계에서 생성된 SSK 키를 사용합니다.
#!/bin/bash (k8s-master)> set -xe (k8s-master)> cat > /opt/openstack-helm-infra/tools/gate/devel/multinode-inventory.yaml <<EOF all: children: primary: hosts: node_one: ansible_port: 22 ansible_host: 10.13.82.43 ansible_user: root ansible_ssh_private_key_file: /root/.ssh/id_rsa ansible_ssh_extra_args: -o StrictHostKeyChecking=no nodes: hosts: node_two: ansible_port: 22 ansible_host: 10.13.82.44 ansible_user: root ansible_ssh_private_key_file: /root/.ssh/id_rsa ansible_ssh_extra_args: -o StrictHostKeyChecking=no node_three: ansible_port: 22 ansible_host: 10.13.82.45 ansible_user: root ansible_ssh_private_key_file: /root/.ssh/id_rsa ansible_ssh_extra_args: -o StrictHostKeyChecking=no EOF
클러스터의 마스터 노드에 환경 파일을 생성합니다.
참고:기본적으로. Kubernetes v1.9.3, Helm v2.7.2 및 CNI v0.6.0이 설치됩니다. 다른 버전을 설치하려면 파일을 편집
${OSH_INFRA_PATH}/tools/gate/devel/multinode-vars.yaml
하여 에${OSH_INFRA_PATH}/playbooks/vars.yaml
제공된 값을 재정의하십시오.샘플
multinode-vars.yaml :
(k8s-master)> cat > /opt/openstack-helm-infra/tools/gate/devel/multinode-vars.yaml <<EOF # version fields version: kubernetes: v1.9.3 helm: v2.7.2 cni: v0.6.0 kubernetes: network: # enp0s8 is your control/data interface, to which kubernetes will bind to default_device: enp0s8 cluster: cni: calico pod_subnet: 192.168.0.0/16 domain: cluster.local docker: # list of insecure_registries, from where you will be pulling container images insecure_registries: - "10.87.65.243:5000" # list of private secure docker registry auth info, from where you will be pulling container images #private_registries: # - name: <docker-registry-name> # username: username@abc.xyz # email: username@abc.xyz # password: password # secret_name: contrail-image-secret # namespace: openstack EOF
마스터 노드에서 플레이북을 실행합니다.
(k8s-master)> set -xe (k8s-master)> cd ${OSH_INFRA_PATH} (k8s-master)> make dev-deploy setup-host multinode (k8s-master)> make dev-deploy k8s multinode
kube-dns
모든 노드의 연결을 확인합니다. Kubernetes 클러스터별 이름을 확인할 수 있는지 확인하는 데 사용합니다nslookup
.(k8s-all-nodes)> nslookup > kubernetes.default.svc.cluster.local Server: 10.96.0.10 Address: 10.96.0.10#53 Non-authoritative answer: Name: kubernetes.default.svc.cluster.local Address: 10.96.0.1
OpenStack Helm 설치 차트
이 절차를 사용하여 OpenStack Helm 차트를 설치합니다.
OpenStack Helm 차트를 설치하기 전에 노드의 기본 레이블을 검토하십시오.
기본 노드에는 및 레이블
openstack-control-plane
이 있습니다openstack-compute-node
. 기본 구성은 모든 노드에 OpenStack Helm(OSH) Pod를 생성합니다. 다음 명령을 사용하여 기본 OpenStack 레이블을 확인합니다.(k8s-master)> kubectl get nodes -o wide -l openstack-control-plane=enabled (k8s-master)> kubectl get nodes -o wide -l openstack-compute-node=enabled
특정 노드에서 OSH Pod 생성을 제한해야 하는 경우 OpenStack 레이블을 비활성화합니다. 다음 예제에서는 노드에서 레이블을
openstack-compute-node
비활성화하는ubuntu-contrail-9
방법을 보여줍니다.(k8s-master)> kubectl label node ubuntu-contrail-9 --overwrite openstack-compute-node=disabled
OpenStack Helm 차트를 배포합니다.
(k8s-master)> set -xe (k8s-master)> cd ${OSH_PATH} (k8s-master)> ./tools/deployment/multinode/010-setup-client.sh (k8s-master)> ./tools/deployment/multinode/021-ingress-opencontrail.sh (k8s-master)> ./tools/deployment/multinode/030-ceph.sh (k8s-master)> ./tools/deployment/multinode/040-ceph-ns-activate.sh (k8s-master)> ./tools/deployment/multinode/050-mariadb.sh (k8s-master)> ./tools/deployment/multinode/060-rabbitmq.sh (k8s-master)> ./tools/deployment/multinode/070-memcached.sh (k8s-master)> ./tools/deployment/multinode/080-keystone.sh (k8s-master)> ./tools/deployment/multinode/090-ceph-radosgateway.sh (k8s-master)> ./tools/deployment/multinode/100-glance.sh (k8s-master)> ./tools/deployment/multinode/110-cinder.sh (k8s-master)> ./tools/deployment/multinode/131-libvirt-opencontrail.sh # Edit ${OSH_PATH}/tools/overrides/backends/opencontrail/nova.yaml and # ${OSH_PATH}/tools/overrides/backends/opencontrail/neutron.yaml # to make sure that you are pulling init container image from correct registry and tag (k8s-master)> ./tools/deployment/multinode/141-compute-kit-opencontrail.sh (k8s-master)> ./tools/deployment/developer/ceph/100-horizon.sh
Contrail Helm 차트 설치
다음 절차에 따라 Contrail Helm 차트를 설치합니다.
Contrail 포드에 레이블을 지정합니다. 모든 Contrail 포드는 다음 레이블을 사용하여 네임스페이스
contrail
에 배포됩니다.컨트롤러 구성 요소 - 구성, 제어, 분석
vRouter 커널—opencontrail.org/vrouter-kernel
vRouter DPDK—opencontrail.org/vrouter-dpdk
다음 예제에서는 레이블을 DPDK로, 레이블을 커널 vrouter로 지정하는
ubuntu-contrail-11
ubuntu-contrail-10
방법을 보여 줍니다.(k8s-master)> kubectl label node ubuntu-contrail-11 opencontrail.org/vrouter-dpdk=enabled (k8s-master)> kubectl label node ubuntu-contrail-10 opencontrail.org/vrouter-kernel=enabled (k8s-master)> kubectl label nodes ubuntu-contrail-9 ubuntu-contrail-10 ubuntu-contrail-11 opencontrail.org/controller=enabled
Contrail을 위한 Kubernetes ClusterRoleBinding을 생성합니다.
(k8s-master)> cd $CHD_PATH (k8s-master)> kubectl replace -f ${CHD_PATH}/rbac/cluster-admin.yaml
Contrail Helm 차트를 설정하고 각 차트에 대한 values.yaml 파일에서 시스템에 특정한 구성 설정을 설정합니다.
(k8s-master)> cd $CHD_PATH (k8s-master)> make # Please note in below example, 192.168.1.0/24 is "Control/Data" network # Export variables (k8s-master)> export CONTROLLER_NODES="192.168.1.43,192.168.1.44,192.168.1.45" (k8s-master)> export VROUTER_GATEWAY="192.168.1.1" (k8s-master)> export CONTROL_DATA_NET_LIST="192.168.1.0/24" (k8s-master)> export BGP_PORT="1179" # [Optional] By default, it will pull latest image from opencontrailnightly (k8s-master)> export CONTRAIL_REGISTRY="opencontrailnightly" (k8s-master)> export CONTRAIL_TAG="latest" # [Optional] only if you are pulling images from a private docker registry export CONTRAIL_REG_USERNAME="abc@abc.com" export CONTRAIL_REG_PASSWORD="password" tee /tmp/contrail-env-images.yaml << EOF global: contrail_env: CONTROLLER_NODES: ${CONTROLLER_NODES} CONTROL_NODES: ${CONTROL_NODES:-CONTROLLER_NODES} LOG_LEVEL: SYS_NOTICE CLOUD_ORCHESTRATOR: openstack AAA_MODE: cloud-admin VROUTER_GATEWAY: ${VROUTER_GATEWAY} BGP_PORT: ${BGP_PORT} contrail_env_vrouter_kernel: CONTROL_DATA_NET_LIST: ${CONTROL_DATA_NET_LIST} AGENT_MODE: nic contrail_env_vrouter_dpdk: AGENT_MODE: dpdk images: tags: kafka: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-external-kafka:${CONTRAIL_TAG:-latest}" cassandra: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-external-cassandra:${CONTRAIL_TAG:-latest}" redis: "redis:4.0.2" zookeeper: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-external-zookeeper:${CONTRAIL_TAG:-latest}" contrail_control: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-control-control:${CONTRAIL_TAG:-latest}" control_dns: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-control-dns:${CONTRAIL_TAG:-latest}" control_named: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-control-named:${CONTRAIL_TAG:-latest}" config_api: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-config-api:${CONTRAIL_TAG:-latest}" config_devicemgr: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-config-devicemgr:${CONTRAIL_TAG:-latest}" config_schema_transformer: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-config-schema:${CONTRAIL_TAG:-latest}" config_svcmonitor: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-config-svcmonitor:${CONTRAIL_TAG:-latest}" webui_middleware: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-webui-job:${CONTRAIL_TAG:-latest}" webui: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-controller-webui-web:${CONTRAIL_TAG:-latest}" analytics_api: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-analytics-api:${CONTRAIL_TAG:-latest}" contrail_collector: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-analytics-collector:${CONTRAIL_TAG:-latest}" analytics_alarm_gen: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-analytics-alarm-gen:${CONTRAIL_TAG:-latest}" analytics_query_engine: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-analytics-query-engine:${CONTRAIL_TAG:-latest}" analytics_snmp_collector: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-analytics-snmp-collector:${CONTRAIL_TAG:-latest}" contrail_topology: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-analytics-snmp-topology:${CONTRAIL_TAG:-latest}" build_driver_init: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-vrouter-kernel-build-init:${CONTRAIL_TAG:-latest}" vrouter_agent: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-vrouter-agent:${CONTRAIL_TAG:-latest}" vrouter_init_kernel: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-vrouter-kernel-init:${CONTRAIL_TAG:-latest}" vrouter_dpdk: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-vrouter-agent-dpdk:${CONTRAIL_TAG:-latest}" vrouter_init_dpdk: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-vrouter-kernel-init-dpdk:${CONTRAIL_TAG:-latest}" nodemgr: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-nodemgr:${CONTRAIL_TAG:-latest}" contrail_status: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-status:${CONTRAIL_TAG:-latest}" node_init: "${CONTRAIL_REGISTRY:-opencontrailnightly}/contrail-node-init:${CONTRAIL_TAG:-latest}" dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.2.1 EOF
참고:다른 환경 변수를 추가해야 하는 경우 해당 차트의 values.yaml 파일에 추가합니다.
# [Optional] only if you are pulling contrail images from a private registry tee /tmp/contrail-registry-auth.yaml << EOF global: images: imageCredentials: registry: ${CONTRAIL_REGISTRY:-opencontrailnightly} username: ${CONTRAIL_REG_USERNAME} password: ${CONTRAIL_REG_PASSWORD} EOF # [Optional] only if you are pulling images from a private registry export CONTRAIL_REGISTRY_ARG="--values=/tmp/contrail-registry-auth.yaml "
Helm install 명령을 사용하여 각 Contrail Helm 차트를 구축합니다.
(k8s-master)> helm install --name contrail-thirdparty ${CHD_PATH}/contrail-thirdparty \ --namespace=contrail \ --values=/tmp/contrail-env-images.yaml \ ${CONTRAIL_REGISTRY_ARG} (k8s-master)> helm install --name contrail-controller ${CHD_PATH}/contrail-controller \ --namespace=contrail \ --values=/tmp/contrail-env-images.yaml \ ${CONTRAIL_REGISTRY_ARG} (k8s-master)> helm install --name contrail-analytics ${CHD_PATH}/contrail-analytics \ --namespace=contrail \ --values=/tmp/contrail-env-images.yaml \ ${CONTRAIL_REGISTRY_ARG} # Edit contrail-vrouter/values.yaml and make sure that global.images.tags.vrouter_init_kernel is right. Image tag name will be different depending upon your linux. Also set the global.node.host_os to ubuntu or centos depending on your system (k8s-master)> helm install --name contrail-vrouter ${CHD_PATH}/contrail-vrouter \ --namespace=contrail \ --values=/tmp/contrail-env-images.yaml \ ${CONTRAIL_REGISTRY_ARG}
Contrail 포드가 가동되어 실행 중이면 OpenStack Heat 차트를 배포합니다.
# Edit ${OSH_PATH}/tools/overrides/backends/opencontrail/nova.yaml and # ${OSH_PATH}/tools/overrides/backends/opencontrail/heat.yaml # to make sure that you are pulling the right opencontrail init container image (k8s-master)> ./tools/deployment/multinode/151-heat-opencontrail.sh
완료되면 컴퓨팅 키트 테스트를 실행합니다.
(k8s-master)> ./tools/deployment/multinode/143-compute-kit-opencontrail-test.sh
OpenStack Helm Contrail 클러스터 기본 테스트
다음 명령을 사용하여 OpenStack Helm Contrail 클러스터의 가상 네트워크 및 가상 머신에 대한 기본 테스트를 수행합니다.
(k8s-master)> export OS_CLOUD=openstack_helm (k8s-master)> openstack network create MGMT-VN (k8s-master)> openstack subnet create --subnet-range 172.16.1.0/24 --network MGMT-VN MGMT-VN-subnet (k8s-master)> openstack server create --flavor m1.tiny --image 'Cirros 0.3.5 64-bit' \ --nic net-id=MGMT-VN \ Test-01 (k8s-master)> openstack server create --flavor m1.tiny --image 'Cirros 0.3.5 64-bit' \ --nic net-id=MGMT-VN \ Test-02
Contrail OpenStack Helm 클러스터 액세스
다음 주제를 사용하여 OpenStack 및 Contrail 웹 UI에 액세스하고 명령줄 인터페이스(CLI)를 위해 OpenStack 클라이언트를 준비하십시오.