1. 程式人生 > 實用技巧 >containered cloud-native (ccn) roadshow 離線部署

containered cloud-native (ccn) roadshow 離線部署

https://github.com/wangzheng422/docker_env/blob/dev/redhat/ocp4/4.4/4.4.ccn.devops.deploy.md

containered cloud-native (ccn) roadshow 離線部署

CCN是一個不錯的演示openshift之上,ci/cd, cloud-native, istio, serverless的演示教材,教學的內容非常豐富。

第一個模組,著重講解如何拆分單體應用,以及拆分的應用如何上雲。

第二個模組,講解如何線上debug, 如何監控上雲的應用

第三個模組,應用轉換到服務網格service mesh/istio架構

第四個模組,應用使用無服務架構serverless/knative架構開發

培訓過程視訊

安裝過程視訊

不過 upstream 的 CCN 是基於 rh demo system 的,必須線上,這裡就做了一個離線的版本,供給客戶離線使用。

離線部署架構描述

本次CCN離線,是基於ocp 4.4.7製作。一共有4個module。

做CCN的離線,主要有以下3部分工作

  • github 離線
  • maven, npm 離線
  • 需要的映象離線

在實驗室的部署架構如下,供參考:

可以看到,與標準的部署架構沒什麼區別,就是在helper節點上面,加了gogs, nexus。

安裝介質下載

請到如下的連結,下載安裝介質,注意,這個安裝介質是基於ocp 4.4.7 製作。

由於上傳的時候,安裝5G大小切分,下載以後,合併使用如下的命令範例:

cat registry.?? > registry.tgz

百度盤上還會有補丁檔案,比如,當有一個 agnosticd.zip 檔案時, 這個就是補丁檔案,上傳到helper上,替換ocp4.tgz解壓縮出來的同名檔案即可。

教材修訂

教材根據上游的專案做了修訂,主要是原始碼,為了應對純離線環境,做了小的修改。如果在教學現場,發現有步驟做不下去,多半是因為離線環境的問題,請參考教學視訊錄影,裡面會有如何繞過離線環境問題的技巧。

基礎ocp4.4環境的部署細節

  • 按照離線的方法安裝ocp4,裡面要特別注意要有這些安裝細節
    • 打上離線registries.conf的補丁
    • 打上local image registry ca的補丁
    • 配置image registry
    • 配置sample operator,並打上image stream的補丁
    • 部署離線operator hub

ccn for ocp-4.4 安裝步驟

# on helper
# deploy gogs
export LOCAL_REG='registry.redhat.ren:5443/'
# export LOCAL_REG=''
# gogs_var_date='2020-07-06'
podman stop gogs
podman rm -fv gogs
cd /data/ccn
rm -rf /data/ccn/gogs
podman run -d --name gogs-fs --entrypoint "tail" ${LOCAL_REG}docker.io/wangzheng422/gogs-fs:2020-07-17-1412 -f /dev/null
podman cp gogs-fs:/gogs.tgz /data/ccn/
tar zxf gogs.tgz
podman rm -fv gogs-fs

podman run -d --name=gogs -p 10022:22 -p 10080:3000 -v /data/ccn/gogs:/data:Z -v /data/ccn/gogs/resolv.conf:/etc/resolv.conf:Z ${LOCAL_REG}docker.io/gogs/gogs

podman stop gogs
podman rm -fv gogs


# deploy nexus
mkdir -p /data/ccn/nexus
cd /data/ccn
rm -rf /data/ccn/nexus
podman run -d --name nexus-fs --entrypoint "tail" ${LOCAL_REG}docker.io/wangzheng422/nexus-fs:2020-07-20-0320 -f /dev/null
podman cp nexus-fs:/nexus.tgz /data/ccn/
tar zxf nexus.tgz ./
podman rm -fv nexus-fs

chown -R 200:root /data/ccn/nexus

podman run -d -p 8081:8081 -it --name nexus -v /data/ccn/nexus:/nexus-data:Z ${LOCAL_REG}docker.io/sonatype/nexus3:latest

podman stop nexus
podman rm -fv nexus


# deploy etherpad

mkdir -p /data/ccn/etherpad
chown -R 5001 /data/ccn/etherpad

podman run -d -p 9001:9001 -it --name etherpad -v /data/ccn/etherpad:/opt/etherpad-lite/var:z ${LOCAL_REG}docker.io/etherpad/etherpad:latest

podman stop etherpad
podman rm -fv etherpad


# agnosticd on helper

mkdir -p /data/pip3
cd /data/pip3
podman create --name swap registry.redhat.ren:5443/docker.io/wangzheng422/base-fs:pip3-whl-2020-07-05 ls
podman cp swap:/wheelhouse.tar.gz - > wheelhouse.tar.gz
tar vxf wheelhouse.tar.gz
podman rm -fv swap

pip3 install --user --upgrade -r wheelhouse/requirements.txt --no-index --find-links wheelhouse

# yum downgrade ansible-2.8.12-1.el7ae

# 安裝ccn環境的引數
oc login -u kubeadmin
# oc login -u system:admin
# TARGET_HOST="bastion.rhte-b5c8.openshiftworkshop.com"
OCP_USERNAME="system:admin"
WORKLOAD="ocp4-workload-ccnrd"
GUID=b5c8
USER_COUNT=2
MODULE_TYPE="m1;m2;m3;m4"
SSH_KEY=~/.ssh/id_rsa
WZH_SUBDOMIN_BASE=base.ocp4.redhat.ren
WZH_REGISTRY_SERVER=registry.redhat.ren:5443
WZH_GOGS_SERVER=gogs.redhat.ren:10080

# create users
BASE_DIR="/root/ocp4"
mkdir -p ${BASE_DIR}
cd ${BASE_DIR}
/bin/rm -f ${BASE_DIR}/htpasswd
touch ${BASE_DIR}/htpasswd

for i in $(seq 1 $USER_COUNT)
do 
    htpasswd -Bb ${BASE_DIR}/htpasswd user${i} redhat
done

oc create secret generic htpasswd --from-file=${BASE_DIR}/htpasswd -n openshift-config

oc apply -f - <<EOF
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: Local Password
    mappingMethod: claim
    type: HTPasswd
    htpasswd:
      fileData:
        name: htpasswd
EOF

# oc delete secret htpasswd -n openshift-config

# 以下是安裝步驟
# a TARGET_HOST is specified in the command line, without using an inventory file
cd /root/ocp4/agnosticd/ansible
ansible-playbook -i localhost, ./configs/ocp-workloads/ocp-workload.yml \
    -e"ansible_ssh_private_key_file=${SSH_KEY}" \
    -e"ansible_user=root" \
    -e"ocp_username=${OCP_USERNAME}" \
    -e"ocp_workload=${WORKLOAD}" \
    -e"silent=False" \
    -e"guid=${GUID}" \
    -e"num_users=${USER_COUNT}" \
    -e"user_count=${USER_COUNT}" \
    -e"module_type=${MODULE_TYPE}" \
    -e"wzh_registry_server=${WZH_REGISTRY_SERVER}" \
    -e"wzh_gogs_server=${WZH_GOGS_SERVER}" \
    -e"ansible_python_interpreter=/usr/bin/python3" \
    -e"subdomain_base=${WZH_SUBDOMIN_BASE}" \
    -v \
    -e"ACTION=create"


# 以下是刪除ccn的步驟,注意大部分的operator不會刪除。
# a TARGET_HOST is specified in the command line, without using an inventory file
ansible-playbook -i localhost, ./configs/ocp-workloads/ocp-workload.yml \
    -e"ansible_ssh_private_key_file=${SSH_KEY}" \
    -e"ansible_user=root" \
    -e"ocp_username=${OCP_USERNAME}" \
    -e"ocp_workload=${WORKLOAD}" \
    -e"silent=False" \
    -e"guid=${GUID}" \
    -e"num_users=${USER_COUNT}" \
    -e"user_count=${USER_COUNT}" \
    -e"module_type=${MODULE_TYPE}" \
    -e"wzh_registry_server=${WZH_REGISTRY_SERVER}" \
    -e"wzh_gogs_server=${WZH_GOGS_SERVER}" \
    -e"ansible_python_interpreter=/usr/bin/python3" \
    -e"subdomain_base=${WZH_SUBDOMIN_BASE}" \
    -v \
    -e"ACTION=remove"