Red Hat Advanced Cluster Management and Application Management, Bagian 1: Deployment in Multiple Environments

Kami memulai serangkaian posting di mana kami akan menunjukkan kepada Anda bagaimana Advanced Cluster Management (ACM) memberikan kemampuan manajemen siklus hidup yang kaya untuk aplikasi yang perlu ada di beberapa lingkungan sekaligus, baik di cloud atau di pusat data perusahaan.



Hari ini kita akan fokus pada aspek GitOps dari ACM dan memecahnya menggunakan konfigurasi model berikut:







Jadi, kami memiliki tiga klaster OpenShift di sini. ACM menggunakan model "hub-managed" untuk mengelola cluster, di mana hub adalah cluster yang menjalankan ACM dan dikelola adalah cluster yang dikelola ACM. Hub menggunakan perangkat lunak Red Hat berikut:



OLEH Versi: kapan
Platform Kontainer OpenShift Red Hat 4.5.7
Manajemen Cluster Lanjutan Red Hat 2.0 Fix Pack 2.0.2


Harap diperhatikan bahwa cluster terkelola memiliki label yang berbeda, kami akan menggunakannya secara aktif saat menempatkan aplikasi di lingkungan yang berbeda.



Seperti yang ditunjukkan pada gambar, kami memiliki cluster pengembangan terkelola yang disebut managed-cluster1-dev yang diterapkan di cloud AWS di wilayah UE. Dan ada juga cluster produksi terkelola yang disebut managed-cluster2-prod, yang juga diterapkan ke AWS, di wilayah AS.



Siklus hidup aplikasi



ACM menawarkan kemampuan ekstensif untuk manajemen siklus hidup aplikasi. Di sini kita akan melihat mereka yang termasuk dalam kategori GitOps dan akan berguna dalam skenario berikut:



  • Terapkan aplikasi Anda ke banyak lingkungan.
  • Terapkan Biru / Hijau.
  • Migrasi aplikasi.
  • Pemulihan bencana


Pertama, mari kita tentukan istilah dan konsep yang akan kita operasikan dalam artikel ini.



Saluran



Saluran menunjuk ke lokasi fisik di mana sumber daya yang akan digunakan disimpan. Disini kita akan menggunakan pipa tipe Git, walaupun ada tipe pipa yang lain (Helm, Namespaces, dll.).



Pelajari lebih lanjut Aturan



Penempatan



Dengan membuat dan mengelola aturan penempatan, Anda menentukan tempat untuk menerapkan langganan sumber daya Kubernetes dan rilis Helm. Dengan menerapkan aturan ini, Anda dapat sangat menyederhanakan penerapan sumber daya Kubernetes di berbagai lingkungan.



Pelajari lebih lanjut



Langganan



Langganan adalah sekumpulan definisi untuk memilih sumber daya Kubernetes di saluran menggunakan anotasi, label, dan versi. Sumber daya langganan disiapkan di hub dan didorong ke cluster terkelola. Pengontrol langganan memantau lokasi sumber (saluran) untuk sumber daya baru atau yang diperbarui. Jika ini terjadi, dia dapat mendownload resource yang sesuai langsung dari lokasi sumber (saluran) ke cluster terkelola tanpa terlebih dahulu memeriksa cluster Hub (karena langganan telah dikirim).



Langganan dapat memfilter rilis Helm untuk memilih versi diagram yang benar. Dalam kasus ini, pengontrol langganan melihat parameter versi untuk memahami versi rilis Helm (bagan) mana yang harus diambil untuk penerapan.



Lebih Banyak



Aplikasi



Objek Application dapat dianggap sebagai cara untuk menggabungkan langganan ke dalam grup. Untuk ini, ada alat dan konsol yang sesuai untuk melakukan agregasi dan melihat semua komponen Aplikasi.



Keterangan lebih lanjut



Repositori Git



Aplikasi kami akan diterapkan sesuai dengan template GitOps, dan untuk lingkungan yang berbeda Anda akan memerlukan manifes berbeda yang akan disimpan dalam repositori Git, yang strukturnya ditunjukkan pada tabel di bawah ini:



Cabang Deskripsi
Config Menyimpan file dasar untuk aplikasi yang digunakan di semua lingkungan
Melecut Menyimpan file overlay untuk aplikasi yang digunakan dalam lingkungan produksi
Tahap Menyimpan file overlay untuk aplikasi yang digunakan dalam lingkungan pengujian


Catatan. Red Hat ACM membatasi cara Anda menyusun repositori Git Anda. Ini dapat diatur tidak hanya seperti yang ditunjukkan pada tabel ini, tetapi juga dengan cara lain yang nyaman bagi Anda.



Menerapkan aplikasi ke banyak lingkungan



Sekarang mari kita lihat bagaimana ACM dapat membantu Anda menerapkan aplikasi Anda di berbagai lingkungan menggunakan layanan web sederhana yang membalikkan kata-kata. Layanan ini memiliki dua rilis: tahap (ini adalah versi yang sedang diuji oleh pengembang) dan produksi (ini adalah versi yang digunakan pelanggan).



ACM mendukung Kustomize , yang membuatnya sangat mudah untuk menyesuaikan aplikasi untuk lingkungan penerapan target.



Seperti yang telah disebutkan, di kedua lingkungan kami menggunakan aplikasi yang sama, tetapi hanya dalam rilis yang berbeda.



Untuk menerapkan aplikasi, kita akan menggunakan alat oc dan satu set yaml-manifests dengan konfigurasi yang diperlukan untuk ACM, yang mengatur Channel, Subscription, dan PlacementRule. Semua yang kami lakukan dari baris perintah dapat dilakukan dari konsol web.



Di alat oc, kita akan memiliki tiga konteks yang dikonfigurasi, satu untuk setiap lingkungan:



Konteks Deskripsi
Pusat Profil CLI untuk cluster HUB (tempat ACM diterapkan)
Dev Profil CLI untuk cluster pengembangan terkelola (cluster-terkelola1-dev)
Pro Profil CLI untuk cluster produksi terkelola (managed-cluster2-prod)


Anda dapat membaca lebih lanjut tentang profil CLI di sini .



Sekarang mari kita lihat sumber daya yang akan digunakan dalam contoh kita:



Saluran



apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
  name: acm-app-lifecycle-blog
  namespace: open-cluster-management
spec:
  type: Git
  pathname: https://github.com/RHsyseng/acm-app-lifecycle-blog.git


Kami menyetel Saluran menjadi Saluran Git yang akan digunakan langganan kami untuk mendapatkan sumber daya Kubernetes yang menerapkan aplikasi kami.



Dalam kasus kami, saluran dikonfigurasi untuk menerima sumber daya Kubernetes dari github.com/RHsyseng/acm-app-lifecycle-blog.git repositori Git.



Namespace



apiVersion: v1
kind: Namespace
metadata:
  name: reverse-words-stage


Saat kami menggunakan Langganan, namespace yang berisi langganan ini diteruskan ke cluster penyebaran target. Oleh karena itu, di sini kami membuat namespace yang disebut tahap kata-terbalik yang akan diteruskan ke cluster dev kami melalui Langganan ini.



Aturan Penempatan



apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
  name: development-clusters
  namespace: reverse-words-stage
spec:
  clusterConditions:
    - type: "ManagedClusterConditionAvailable"
      status: "True"
  clusterSelector:
    matchExpressions: []
    matchLabels:
      environment: "dev"


Daftar cluster tempat langganan diteruskan diambil dari apa yang dikembalikan PlacementRule. Dengan kata lain, kita perlu memilih cluster tertentu dari lingkungan kita dan mentransfernya ke berbagai langganan, inilah tugas yang diselesaikan PlacementRules. Dalam



contoh kita, PlacementRule bernama development-cluster mengembalikan semua cluster yang ditandai sebagai Tersedia, dan dengan label yang memenuhi kondisi lingkungan. : dev. Artinya, dalam kasus kami, outputnya adalah dev-cluster terkelola bernama managed-cluster1-dev.



Berlangganan



apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: reversewords-dev-app-subscription
  namespace: reverse-words-stage
  labels:
    app: reversewords-dev-app
  annotations:
    apps.open-cluster-management.io/git-path: apps/reversewords/
    apps.open-cluster-management.io/git-branch: stage
spec:
  channel: open-cluster-management/acm-app-lifecycle-blog
  placement:
    placementRef:
      kind: PlacementRule
      name: development-clusters


Pada contoh di atas, Subscription bertanggung jawab untuk menerapkan daftar resource Kubernetes (diambil dari Channel) ke cluster dari daftar tersebut (diambil dari PlacementRule). Namun selain itu, Anda juga dapat menentukan di mana tepatnya resource Kubernetes ini berada di repositori Git (channel).



Langganan kami menggunakan Saluran yang kami tentukan di atas dan mengambil sumber daya Kubernetes dari cabang panggung, di mana ia mencarinya di folder apps / reversewords /.



Aplikasi



apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
  name: reversewords-dev-app
  namespace: reverse-words-stage
spec:
  componentKinds:
  - group: apps.open-cluster-management.io
    kind: Subscription
  descriptor: {}
  selector:
    matchExpressions:
    - key: app
      operator: In
      values:
      - reversewords-dev-app


Aplikasi membantu membuat topologi aplikasi kita pada cluster yang dikelola oleh ACM. Untuk melakukan ini, Aplikasi memilih satu atau lebih langganan, yang pada akhirnya membuat sumber daya di berbagai kluster, sehingga kami dapat melacak siapa yang membuat apa dan di mana itu dibuat.



Catatan. Di sini, kami hanya membahas sumber daya yang akan digunakan saat menerapkan aplikasi di lingkungan pengembang. Sumber daya untuk lingkungan lain dapat ditemukan di repositori GitHub dan cukup jelas dan mirip dengan yang telah kami bahas.



Terapkan aplikasi di lingkungan pengembangan





1. Langkah pertama adalah membuat definisi Channel.



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/base/00_channel.yaml


2. Selanjutnya, kami membuat Namespace untuk menyimpan manifes aplikasi kami.



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/00_namespace.yaml


3. Sekarang kita membuat PlacementRule yang akan memilih dev-cluster yang dikelola.



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/01_placement_rule.yaml


Lihat status PlacementRule. Perhatikan bahwa aturan ini memilih cluster-dev cluster1-dev yang dikelola:



oc --context hub -n reverse-words-stage get placementrule development-clusters -o yaml

<OMITTED_OUTPUT>
status:
  decisions:
  - clusterName: managed-cluster1-dev
    clusterNamespace: managed-cluster1-dev


4. Sekarang Anda dapat membuat Langganan dan Aplikasi untuk menargetkan cluster dev menggunakan PlacementRule.



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/02_subscription-dev.yaml
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/03_application-dev.yaml


Lihat status Langganan. Perhatikan kata disebarkan, artinya langganan telah dikirim ke cluster target:



oc --context hub -n reverse-words-stage get subscription reversewords-dev-app-subscription -o yaml
<OMITTED_OUTPUT>
status:
  message: Active
  phase: Propagated


5. Terakhir, kami melihat cluster dev dan melihat bahwa aplikasi telah diterapkan dan berfungsi.



oc --context dev -n reverse-words-stage get deployments,services,pods
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/reverse-words   1/1     1            1           73s

NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP                                                              PORT(S)          AGE
service/reverse-words   LoadBalancer   172.30.217.208   a84668cb23acf4d109a78b119dfddbef-750551.eu-central-1.elb.amazonaws.com   8080:30053/TCP   73s

NAME                                 READY   STATUS    RESTARTS   AGE
pod/reverse-words-68b9b894dd-jfgpf   1/1     Running   0          73s


Jika kami mencoba menjalankan permintaan ke cluster produksi, kami akan melihat bahwa aplikasi tidak berjalan di sana.



oc --context pro -n reverse-words-stage get deployments,services,pods
No resources found in reverse-words-stage namespace.


6. Sekarang mari jalankan permintaan ke aplikasi kita dan pastikan bahwa kita telah menerapkan rilis yang diperlukan, yaitu staging:



curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3


Menerapkan aplikasi dalam lingkungan produksi





1. Tidak perlu membuat Channel baru, karena kita akan menggunakan repo Git yang sama sebagai source, tetapi hanya cabang yang berbeda.



2. Buat Namespace untuk menyimpan manifes aplikasi kita.



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/00_namespace.yaml


3. Sekarang kita membuat PlacementRule yang memilih cluster produksi:



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/01_placement_rule.yaml


Lihat status PlacementRule. Perhatikan bahwa aturan ini memilih cluster produksi managed-cluster2-prod.



oc --context hub -n reverse-words-prod get placementrule production-clusters -o yaml

<OMITTED_OUTPUT>
status:
  decisions:
  - clusterName: managed-cluster2-prod
    clusterNamespace: managed-cluster2-prod


4. Sekarang Anda dapat membuat Langganan dan Aplikasi untuk menetapkan cluster produksi sebagai target menggunakan PlacementRule.



oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/02_subscription-pro.yaml
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/03_application-pro.yaml


Lihat status Langganan. Perhatikan kata disebarkan, artinya langganan telah dikirim ke cluster target:



oc --context hub -n reverse-words-prod get subscription reversewords-pro-app-subscription -o yaml

<OMITTED_OUTPUT>
status:
  message: Active
  phase: Propagated


5. Dan terakhir, kami melihat cluster produksi dan melihat bahwa aplikasi telah diterapkan dan berfungsi.



oc --context pro -n reverse-words-prod get deployments,services,pods
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/reverse-words   1/1     1            1           93s

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/reverse-words   LoadBalancer   172.30.100.0   a6067d9a2cd904003a1b53b65f9e1cb3-450574743.us-west-2.elb.amazonaws.com   8080:30293/TCP   96s

NAME                                READY   STATUS    RESTARTS   AGE
pod/reverse-words-7dd94446c-vkzr8   1/1     Running   0          94s


6. Sekarang mari kita jalankan permintaan ke aplikasi kita dan pastikan bahwa kita telah menerapkan rilis yang diperlukan, yaitu produksi:



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
Reverse Words Release: Production release v0.0.2. App version: v0.0.2


7. Sekarang kami memiliki versi berbeda dari aplikasi kami untuk lingkungan penerapan yang berbeda:



# Query development environment
curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
# Query production environment
curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
# Dev Query
Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3
# Pro Query
Reverse Words Release: Production release v0.0.2. App version: v0.0.2


Dan terakhir, mari kita lihat tampilannya di konsol web:



Tampilan Umum Aplikasi ACM







Tampilan Aplikasi Pengembangan ACM







Bersambung



Di posting berikutnya, kami akan menunjukkan kepada Anda bagaimana menggunakan ACM untuk penyebaran Biru / Hijau, migrasi aplikasi, dan pemulihan bencana.



All Articles