Menyesuaikan rencana migrasi untuk server Tomcat
Anda harus meninjau file rencana migrasi yang dihasilkan dari pembuatan migrasi. Sesuaikan file sebelum menjalankan migrasi. Detail rencana migrasi digunakan untuk mengekstrak artefak penampung beban kerja dari sumber.
Bagian ini menjelaskan konten migrasi dan jenis penyesuaian yang dapat Anda pertimbangkan sebelum menjalankan migrasi dan membuat artefak deployment.
Sebelum memulai
Topik ini mengasumsikan bahwa Anda telah membuat migrasi dan memiliki file rencana migrasi.
Mengedit paket migrasi
Setelah menyalin sistem file dan menganalisisnya, Anda dapat menemukan
paket migrasi di direktori baru yang dibuat di jalur output
yang ditentukan: ANALYSIS_OUTPUT_PATH/config.yaml
.
Edit rencana migrasi seperlunya dan simpan perubahannya.
Tinjau detail rencana migrasi dan komentar panduan untuk menambahkan informasi sesuai kebutuhan. Secara khusus, pertimbangkan untuk mengedit bagian berikut.
Menentukan image Docker
Dalam rencana migrasi, kami membuat tag image komunitas Docker berdasarkan versi Tomcat, versi Java, dan vendor Java.
- Versi Tomcat: versi Tomcat terdeteksi dan dikonversi ke versi
utama (versi minor tidak didukung). Jika gagal mendeteksi versi Tomcat,
baseImage.name
akan berisi string kosong. - Versi Java: versi Java bergantung pada parameter
java-version
. Atribut ini disetel ke11
secara default. - Vendor Java: vendor Java disetel ke konstanta:
temurin
.
Misalnya, tag image komunitas Docker yang dihasilkan untuk Tomcat versi 9.0, Java versi 11, dan temurin
vendor Java adalah tomcat:9.0-jre11-temurin
.
Dalam rencana migrasi, kolom baseImage.name
mewakili tag image Docker
yang digunakan sebagai dasar image container.
Versi Tomcat dan Java asli yang terdeteksi pada VM sumber terdapat dalam
discovery-report.yaml
yang dihasilkan oleh penemuan awal.
Jika ingin mengubah image komunitas Docker, atau menyediakan image Docker sendiri, Anda dapat mengubah baseImage.name
dalam rencana migrasi menggunakan format berikut:
tomcatServers: - name: latest . . . images: - name: tomcat-latest . . . baseImage: name: BASE_IMAGE_NAME
Ganti BASE_IMAGE_NAME dengan image Docker yang ingin Anda gunakan sebagai dasar image container.
Memperbarui jalur penginstalan Tomcat
Selama proses migrasi, jika image target memiliki jalur
CATALINA_HOME
non-default, Anda dapat menentukan jalur CATALINA_HOME
kustom. Edit
kolom catalinaHome
target secara langsung di rencana migrasi Anda:
tomcatServers: - name: latest . . . images: - name: tomcat-latest . . . baseImage: name: BASE_IMAGE_NAME catalinaHome: PATH
Ganti PATH dengan jalur penginstalan Tomcat.
Sesuaikan pengguna dan grup
Selama proses migrasi, jika image target dijalankan dengan pengguna
dan grup yang berbeda dengan root:root
, Anda dapat menentukan pengguna dan grup kustom
tempat aplikasi dijalankan. Edit pengguna dan grup secara langsung
dalam rencana migrasi Anda:
tomcatServers: - name: latest . . . images: - name: tomcat-latest . . . userName: USERNAME groupName: GROUP_NAME
Ganti kode berikut:
- USERNAME: nama pengguna yang ingin Anda gunakan
- GROUP_NAME: nama grup yang ingin Anda gunakan
Mengonfigurasi SSL
Saat Anda membuat migrasi Tomcat baru, proses penemuan memindai server untuk mendeteksi berbagai aplikasi yang ditemukan.
Setelah ditemukan, kolom berikut akan otomatis diisi dalam paket migrasi:
excludeFiles
: mencantumkan file dan direktori yang akan dikecualikan dari migrasi.Secara default, semua jalur dan sertifikat sensitif yang terletak selama penemuan otomatis ditambahkan ke kolom ini dan dikecualikan dari migrasi. Jika Anda menghapus jalur dari daftar ini, file atau direktori akan diupload ke image container. Untuk mengecualikan file atau direktori dari image container, tambahkan jalur ke daftar ini.
sensitiveDataPaths
: mencantumkan semua jalur dan sertifikat sensitif yang berada oleh proses penemuan.Untuk mengupload sertifikat ke repositori, tetapkan kolom
includeSensitiveData
ketrue
:# Sensitive data which will be filtered out of the container image. # If includeSensitiveData is set to true the sensitive data will be mounted on the container. includeSensitiveData: true tomcatServers: - name: latest catalinaBase: /opt/tomcat/latest catalinaHome: /opt/tomcat/latest # Exclude files from migration. excludeFiles: - /usr/local/ssl/server.pem - /usr/home/tomcat/keystore - /usr/home/tomcat/truststore images: - name: tomcat-latest ... # If set to true, sensitive data specified in sensitiveDataPaths will be uploaded to the artifacts repository. sensitiveDataPaths: - /usr/local/ssl/server.pem - /usr/home/tomcat/keystore - /usr/home/tomcat/truststore
Setelah migrasi selesai, secret akan ditambahkan ke file rahasia
secrets.yaml
di repositori artefak.
Logging aplikasi web
Migrate to Containers mendukung logging dengan log4j v2
, logback
, dan log4j v1.x
yang berada di CATALINA_HOME
.
Migrate to Containers membuat file arsip tambahan dengan konfigurasi log yang dimodifikasi, dan mengonversi semua lampiran jenis file menjadi appender konsol. Anda dapat menggunakan konten arsip ini sebagai referensi untuk mengaktifkan pengumpulan dan streaming log ke solusi pengumpulan log (seperti Google Cloud Logging).
Alokasi memori
Selama proses migrasi, Anda dapat menentukan batas memori aplikasi yang dimigrasikan ke container individual. Edit batas memori secara langsung dalam paket migrasi Anda menggunakan format berikut:
tomcatServers:
- name: latest
. . .
images:
- name: tomcat-latest
. . .
resources:
memory:
limit: 2048M
requests: 1280M
Nilai yang direkomendasikan untuk limit
adalah 200% dari Xmx
, yang merupakan ukuran heap Java
maksimum. Nilai yang direkomendasikan untuk requests
adalah 150% dari Xmx
.
Untuk melihat nilai Xmx
, jalankan perintah berikut:
ps aux | grep catalina
Jika batas memori telah ditentukan dalam rencana migrasi Anda, Dockerfile yang dihasilkan bersama artefak lain setelah migrasi berhasil akan mencerminkan deklarasi Anda:
FROM tomcat:8.5-jdk11-openjdk
# Add JVM environment variables for tomcat
ENV CATALINA_OPTS="${CATALINA_OPTS} -XX:MaxRAMPercentage=50.0 -XX:InitialRAMPercentage=50.0 -XX:+UseContainerSupport <additional variables>"
Ini menentukan ukuran awal dan maksimum 50% dari nilai batas. Hal ini memungkinkan ukuran alokasi heap Tomcat Java berubah sesuai dengan perubahan apa pun dengan batas memori pod.
Menetapkan variabel lingkungan Tomcat
Jika ingin menetapkan CATALINA_OPTS
di Dockerfile yang dibuat bersama artefak lain setelah migrasi berhasil, Anda dapat menambahkannya terlebih dahulu ke kolom catalinaOpts
dalam rencana migrasi Anda. Contoh berikut menunjukkan kolom catalinaOpts
yang diperbarui:
tomcatServers:
- name: latest
. . .
images:
- name: tomcat-latest
. . .
resources:
. . .
catalinaOpts: "-Xss10M"
Migrate to Containers akan mengurai data catalinaOpts
Anda ke Dockerfile. Contoh berikut menunjukkan output penguraian:
FROM 8.5-jdk11-openjdk-slim
## setenv.sh script detected.
## Modify env variables on the script and add definitions to the migrated
## tomcat server, if needed (less recommended than adding env variables directly
## to CATALINA_OPTS) by uncomment the line below
#ADD --chown=root:root setenv.sh /usr/local/tomcat/bin/setenv.sh
# Add JVM environment variables for the tomcat server
ENV CATALINA_OPTS="${CATALINA_OPTS} -XX:MaxRAMPercentage=50.0 -XX:InitialRAMPercentage=50.0 -Xss10M"
Anda juga dapat menetapkan variabel lingkungan Tomcat menggunakan skrip setenv.sh
,
yang terletak di folder /bin
pada server Tomcat Anda. Untuk mengetahui informasi
selengkapnya tentang variabel lingkungan Tomcat, lihat
dokumentasi Tomcat.
Jika memilih menggunakan setenv.sh
untuk menetapkan variabel lingkungan Tomcat, Anda harus mengedit Dockerfile.
Setel pemeriksaan kesehatan Tomcat
Anda dapat memantau periode nonaktif dan status siap penampung yang dikelola dengan menentukan pemeriksaan dalam rencana migrasi server web Tomcat Anda. Pemantauan pemeriksaan kesehatan dapat membantu mengurangi periode nonaktif container yang dimigrasikan dan memberikan pemantauan yang lebih baik.
Status kesehatan yang tidak diketahui dapat menyebabkan penurunan ketersediaan, pemantauan ketersediaan yang positif palsu (PP palsu), dan potensi hilangnya data. Tanpa pemeriksaan kesehatan, kubelet hanya dapat mengasumsikan kondisi container dan mungkin mengirim traffic ke instance container yang belum siap. Tindakan ini dapat menyebabkan kehilangan traffic. Kubelet mungkin juga tidak mendeteksi container yang berada dalam status beku dan tidak memulai ulang container tersebut.
Pemeriksaan kesehatan berfungsi dengan menjalankan pernyataan berskrip kecil saat
penampung dimulai. Skrip akan memeriksa kondisi yang berhasil, yang ditentukan oleh jenis pemeriksaan yang digunakan, setiap periode. Periode ditentukan dalam
rencana migrasi oleh kolom periodSeconds
. Anda dapat menjalankan atau menentukan skrip ini
secara manual.
Untuk mempelajari lebih lanjut pemeriksaan kubelet, lihat Mengonfigurasi Pemeriksaan Keaktifan, Kesiapan, dan Startup dalam dokumentasi Kubernetes.
Ada dua jenis probe yang dapat dikonfigurasi, kedua probe adalah probe-v1-core yang ditentukan dalam referensi probe-v1-core dan memiliki fungsi yang sama dengan kolom container-v1-core yang sesuai
- Pemeriksaan kehidupan: Pemeriksaan keaktifan digunakan untuk mengetahui kapan harus memulai ulang container.
- Pemeriksaan kesiapan: Pemeriksaan kesiapan digunakan untuk mengetahui kapan penampung siap untuk mulai menerima traffic. Untuk mulai mengirim traffic ke Pod hanya ketika pemeriksaan berhasil, tentukan kesiapan. Pemeriksaan kesiapan mungkin bertindak mirip dengan pemeriksaan keaktifan, tetapi pemeriksaan kesiapan dalam spesifikasi menunjukkan bahwa Pod dimulai tanpa menerima traffic dan hanya mulai menerima traffic setelah pemeriksaan berhasil.
Setelah ditemukan, konfigurasi pemeriksaan ditambahkan ke paket migrasi. Probe
dapat digunakan dalam konfigurasi default seperti yang ditunjukkan pada contoh
berikut. Untuk menonaktifkan pemeriksaan, hapus bagian probes
dari file YAML.
tomcatServers: - name: latest images: - name: tomcat-latest ports: - 8080 probes: livenessProbe: tcpSocket: port: 8080 readinessProbe: tcpSocket: port: 8080
Anda dapat mengubah paket migrasi ini untuk menggunakan endpoint HTTP Tomcat yang sudah ada.
tomcatServers: - name: latest images: - name: tomcat-latest ports: - 8080 probes: livenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3 readinessProbe: httpGet: tcpSocket: port: 8080
Ada empat cara yang telah ditentukan untuk memeriksa container menggunakan probe. Setiap pemeriksaan harus menentukan dengan tepat salah satu dari empat mekanisme ini:
exec
: Mengeksekusi perintah yang ditentukan di dalam container. Eksekusi dianggap berhasil jika kode status keluar adalah 0.grpc
: Melakukan panggilan prosedur jarak jauh menggunakan `gRPC`. Pemeriksaan `gRPC` adalah fitur alfa.httpGet
: Menjalankan permintaan GET HTTP terhadap alamat IP Pod di port dan jalur yang ditentukan. Permintaan dianggap berhasil jika kode statusnya lebih besar dari atau sama dengan 200 dan kurang dari 400.tcpSocket
: Melakukan pemeriksaan TCP terhadap alamat IP Pod di port yang ditentukan. Diagnostik dianggap berhasil jika port terbuka.
Secara default, rencana migrasi mengaktifkan metode pemeriksaan tcpSocket
. Gunakan
konfigurasi manual rencana migrasi Anda untuk menggunakan metode pemeriksaan yang berbeda.
Anda juga dapat menentukan skrip dan perintah kustom melalui rencana migrasi.
Guna menambahkan dependensi eksternal untuk pemeriksaan kesiapan, saat menggunakan pemeriksaan keaktifan default, tentukan pemeriksaan kesiapan eksekutif dan skrip yang menerapkan logika.
Memverifikasi konfigurasi pengelompokan Tomcat
Pengelompokan Tomcat digunakan untuk mereplikasi informasi sesi di semua node Tomcat, yang memungkinkan Anda memanggil salah satu server aplikasi backend dan tidak kehilangan informasi sesi klien. Untuk mempelajari konfigurasi pembuatan cluster lebih lanjut, lihat Petunjuk Cara Pengelompokan/Replikasi Sesi dalam dokumentasi Tomcat.
Class pengelompokan Tomcat disebut SimpleTcpListener
, yang menggunakan pesan
detak jantung multicast untuk penemuan pembanding. Lingkungan cloud tidak mendukung multicast, sehingga Anda harus mengubah konfigurasi pengelompokan atau menghapusnya, jika memungkinkan.
Saat dikonfigurasi untuk menjalankan dan mempertahankan sesi melekat ke server Tomcat backend, load balancer dapat menggunakan properti jvmRoute
yang dikonfigurasi di konfigurasi Engine
Jika lingkungan sumber Anda menggunakan konfigurasi pengelompokan yang tidak didukung,
ubah file server.xml
untuk menonaktifkan konfigurasi, atau gunakan
konfigurasi yang didukung.
- Tomcat v8.5 atau yang lebih baru: Pengelompokan harus dinonaktifkan di Tomcat versi 8.5.
Untuk menonaktifkan pengelompokan, Anda perlu memberi komentar pada bagian
<Cluster … />
diserver.xml
. Tomcat v9 atau yang lebih baru: Di Tomcat versi 9 atau yang lebih baru, Anda dapat mengaktifkan class
Cluster
menggunakanKubernetesMembershipService
.KubernetesMembershipService
adalah class khusus Kubernetes, yang menggunakan Kubernetes API untuk penemuan pembanding.Penyedia Kubernetes: Berikut ini contoh konfigurasi untuk penyedia Kubernetes:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.cloud.CloudMembershipService" membershipProviderClassName="org.apache.catalina.tribes.membership.cloud.KubernetesMembershipProvider"/> </Channel> </Cluster>
Penyedia DNS: Gunakan
DNSMembershipProvider
untuk menggunakan API DNS agar dapat ditemukan oleh pembanding. Berikut adalah contoh konfigurasi untuk penyedia DNS:<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.cloud.CloudMembershipService" membershipProviderClassName="org.apache.catalina.tribes.membership.cloud.DNSMembershipProvider"/> </Channel> </Cluster>
jvmRoute: Jika load balancer Anda mengandalkan nilai jvmRoute, nilai tersebut harus diubah dari statis menjadi menggunakan nama POD. Tindakan ini akan mengonfigurasi Tomcat untuk menambahkan akhiran ke cookie sesi dengan nama POD. Ini dapat digunakan oleh load balancer frontend untuk mengarahkan traffic ke POD Tomcat yang benar. Ubah nilai dalam file
server.xml
untuk menggunakan hal berikut:<Engine name="Catalina" defaultHost="localhost" jvmRoute="${HOSTNAME}">
Memverifikasi konfigurasi proxy Tomcat
Jika Tomcat dikonfigurasi untuk berjalan di belakang proxy terbalik, atau menggunakan beberapa setelan
konfigurasi proxy di bagian Connector
pada server.xml
, Anda harus
memverifikasi bahwa konfigurasi proxy yang sama masih berlaku setelah dimigrasikan untuk
dijalankan di Kubernetes.
Untuk menjalankan aplikasi Tomcat dalam container yang berfungsi, pilih salah satu perubahan konfigurasi berikut pada konfigurasi reverse proxy:
- Nonaktifkan konfigurasi proxy: Jika aplikasi yang dimigrasikan tidak lagi
berjalan di belakang reverse proxy, Anda dapat menonaktifkan konfigurasi proxy dengan menghapus
proxyName
danproxyPort
dari konfigurasi konektor. - Migrasikan proxy: Migrasikan VM proxy dan pertahankan semua konfigurasi Tomcat yang ada.
Mengonfigurasi Ingress untuk mengganti reverse proxy: Jika tidak ada logika kustom atau canggih yang diterapkan untuk reverse proxy, Anda dapat mengonfigurasi resource Ingress untuk mengekspos aplikasi Tomcat yang dimigrasikan. Proses ini menggunakan FQDN yang sama dengan yang digunakan sebelum migrasi. Untuk mengonfigurasi Ingress, Anda harus memverifikasi bahwa Layanan Kubernetes Tomcat Anda adalah
type: Nodeport
. Berikut adalah contoh konfigurasi Ingress:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-tomcat-ingress spec: rules: - host: APP_DOMAIN http: paths: - pathType: ImplementationSpecific backend: service: name: my-tomcat-service port: name: my-tomcat-port
Mengonfigurasi Anthos Service Mesh dengan Cloud Load Balancing: Jika menggunakan GKE Enterprise, Anda dapat memilih untuk mengekspos aplikasi menggunakan Anthos Service Mesh. Untuk mempelajari lebih lanjut cara mengekspos aplikasi mesh layanan, lihat Dari tepi ke mesh: Mengekspos aplikasi mesh layanan melalui GKE Ingress.
Memverifikasi konfigurasi proxy Java
Saat bermigrasi ke container, Anda harus memverifikasi ketersediaan server proxy di lingkungan baru. Jika server proxy tidak tersedia, pilih salah satu perubahan konfigurasi pada proxy berikut:
- Nonaktifkan proxy: Jika proxy asli tidak lagi digunakan, nonaktifkan
konfigurasi proxy. Hapus semua setelan proxy dari skrip
setenv.sh
, atau dari file konfigurasi tempat setelan tersebut dikelola di server Tomcat Anda. - Ubah setelan proxy: Jika lingkungan Kubernetes Anda menggunakan proxy keluar yang berbeda, Anda dapat mengubah setelan proxy di
setenv.sh
, atau file lainnya, agar mengarah ke proxy baru.
Langkah selanjutnya
- Pelajari cara menjalankan migrasi.