Tim Oc untuk menyelamatkan

Jika Anda spesial di OpenShift, maka posting ini tidak mungkin mengungkapkan banyak hal kepada Anda. Tetapi jika Anda baru mulai menguasainya, maka itu akan menghemat banyak waktu dan saraf. Kami meminta Jorge Tudela GonzΓ‘lez de Riancho, seorang konsultan cloud di kantor Red Hat Spanyol, untuk menulis beberapa peretasan kehidupan untuk utilitas oc .



Ini adalah tim yang keren, dipikirkan dengan matang, kuat, fleksibel, dan, seperti yang akan Anda lihat, ini memiliki banyak fitur tersembunyi yang pantas untuk dicoba.

1. Hal pertama yang pertama: debugging


Ketika saya tidak tahu apa yang sedang terjadi, atau saya mendapatkan pesan kesalahan yang tidak bisa dipahami, saya selalu menggunakan flag --loglevell , yang memungkinkan logging ke stderr. Bergantung pada nilai flag ini, Anda dapat melihat ikal panggilan API Rest, konten tanggapan API Rest, atau bahkan informasi lebih rinci.



$ oc --loglevel 7 get pod
...
I0216 21:24:12.027793 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/v1/serverresources.json
I0216 21:24:12.028046 973 round_trippers.go:383] GET https://192.168.42.77:8443/api/v1/namespaces/myproject/pods
I0216 21:24:12.028052 973 round_trippers.go:390] Request Headers:
I0216 21:24:12.028057 973 round_trippers.go:393] Accept: application/json
I0216 21:24:12.028061 973 round_trippers.go:393] User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff
I0216 21:24:12.053230 973 round_trippers.go:408] Response Status: 200 OK in 25 milliseconds
I0216 21:24:12.055143 973 cached_discovery.go:119] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/servergroups.json
I0216 21:24:12.055228 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/authentication.k8s.io/v1/serverresources.json
I0216 21:24:12.055288 973 cached_discovery.go:72]
...

Misalnya, loglevel 9 sangat nyaman ketika Anda menambal objek OCP, karena memungkinkan Anda untuk melihat tambalan itu sendiri (isi permintaan API).

Jika, misalnya, tambalan mengubah label layanan menjadi "app: hello-jorge", maka akan terlihat seperti ini:

$ oc --loglevel 9 edit svc hello-openshift
...
I0216 21:33:15.786463 1389 request.go:994] Request Body: {"metadata":{"labels":{"app":"hello-jorge"}}}
I0216 21:33:15.786590 1389 round_trippers.go:386] curl -k -v -XPATCH -H "Accept: application/json" -H "Content-Type: application/strategic-merge-patch+json" -H "User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff" https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift
I0216 21:33:15.797185 1389 round_trippers.go:405] PATCH https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift 200 OK in 10 milliseconds
...

Catatan Pada saat putus asa, alih-alih satu sembilan, Anda dapat berkendara beberapa sekaligus. Output dari perintah oc tidak akan berubah dari ini, tetapi mungkin terasa lebih baik untuk Anda.

$ oc --loglevel 9999 get pod

2. su -


Ya, Anda mengerti dengan benar. Perintah oc dapat dijalankan atas nama pengguna lain, atau, menggunakan bahasa OCP, gunakan peniruan identitas . Tentunya dengan hak yang sesuai. Dan untuk ini, hanya menggunakan flag --as sudah cukup .

Sebagai contoh:

# jorge
$ oc --as=jorge get pods

Peniruan identitas tidak hanya untuk pengguna, tetapi juga untuk grup:

# developers
$ oc --as-group=developers get pods

Peniruan identitas berguna dalam berbagai kasus. Misalnya, ketika Anda perlu memeriksa apakah pengguna dapat melakukan satu atau beberapa tindakan, atau melihat apa yang diperintahkan perintah oc kepadanya. Peniruan identitas juga banyak membantu dalam kebingungan dengan peran dan izin.

3. Whoami


Tim oC whoami mungkin akrab bagi semua orang. Terutama flag -t , yang memungkinkan Anda untuk mendapatkan token media untuk pengguna / sesi saat ini. Tetapi bagaimana jika Anda memiliki token, tetapi Anda bukan pemiliknya?

Dalam hal ini, Anda bisa masuk ke OpenShift menggunakan token ini, dan kemudian jalankan perintah oc whoami . Meskipun, tunggu, Anda dapat segera mengetahui nama pemiliknya dengan hanya menyerahkan token ke perintah oc whoami sebagai argumen ketiga tanpa tanda apa pun.

Lihat:
#
$ token=$(oc whoami -t)

#
$ oc whoami $token
jorge

4. oc debug


Seperti yang Anda ketahui, sebuah shell dapat dijalankan langsung di pod yang sedang berjalan. Kadang-kadang berguna untuk membuat salinan lengkap dari konfigurasi pod yang sedang berjalan dan memecahkan masalah melalui shell. Inilah yang disebut metode default.

Sekarang lihat apa yang memungkinkan Anda melakukan opsi debug oc : Anda dapat menjalankan wadah sebagai root atau pengguna lain; Anda dapat menjalankannya pada node yang dipilih atau Anda dapat menjalankannya bukan shell, tetapi perintah lain.

Dalam hal ini, Anda harus menentukan dc yang benar, misalnya:
# shell pod' dc/jorge
$ oc debug dc/jorge

# , root
$ oc debug --as-root=true dc/jorge

5. oc jelaskan


Objek OpenShift / Kubernetes terkadang memiliki sejumlah besar bidang. Saat mencari contoh definisi untuk objek seperti itu, Anda sering harus membuka dokumentasi untuk OCP atau sumber utama lainnya. Namun, Anda dapat menggunakan perintah oc menjelaskan juga.

Perintah ini menampilkan dokumentasi tentang sumber daya dan bidangnya, yang sangat berguna ketika mendeklarasikan objek OCP baru atau dalam kasus di mana Anda tidak memiliki akses ke dokumentasi OCP resmi.

Misalnya, berikut cara mendapatkan dokumentasi pod dan deskripsi bidang afinitas:

 # dapatkan bantuan di pod
 $ oc jelaskan pod
 DESKRIPSI:
 Pod adalah kumpulan kontainer yang dapat berjalan di host.  Sumber daya ini dibuat oleh klien dan dijadwalkan ke host.

 BIDANG:
   metadata <Object>
     Metadata objek standar.  Info lebih lanjut:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

   spec <Object>
     Spesifikasi perilaku pod yang diinginkan.  Info lebih lanjut:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

   status <Object>
     Status pod yang paling baru diamati.  Data ini mungkin tidak terbaru.
     Dipenuhi oleh sistem.  Hanya baca.  Info lebih lanjut:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

   apiVersion <string>
     APIVersion mendefinisikan skema versi representasi dari sebuah
     objek  Server harus mengkonversi skema yang dikenal ke internal terbaru
     nilai, dan dapat menolak nilai yang tidak dikenal.  Info lebih lanjut:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

   baik <string>
     Jenis adalah nilai string yang mewakili sumber daya REST objek ini
     mewakili.  Server dapat menyimpulkan ini dari titik akhir yang dikirimkan klien
     permintaan untuk.  Tidak dapat diperbarui  Di CamelCase.  Info lebih lanjut:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

 # dapatkan uraian bidang afinitas
 $ oc jelaskan pod.spec.affinity
 SUMBER DAYA: afinitas <Object>

 DESKRIPSI:
     Jika ditentukan, kendala penjadwalan pod

    Afinitas adalah sekelompok aturan penjadwalan afinitas.

 BIDANG:
   nodeAffinity <Object>
     Menjelaskan aturan penjadwalan afinitas simpul untuk pod.

   podAffinity <Object>
     Menjelaskan aturan penjadwalan afinitas pod (mis. Menemukan bersama pod ini di
     simpul, zona, dll yang sama  seperti beberapa pod lainnya.

   podAntiAffinity <Object>
     Menjelaskan aturan penjadwalan anti-afinitas pod (mis. Hindari menempatkan pod ini
     di node, zona, dll yang sama  seperti beberapa pod lainnya.

6. Lupakan grep, awk, cut, dll.


Fitur keren lainnya dari perintah oc adalah fungsi format output bawaan. Semua orang tahu tentang opsi -o json atau -o yaml , tetapi flag -o memiliki banyak opsi lain.

Yang paling kuat mungkin adalah go-templat dan jsonpath :

json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...

Katakanlah Anda ingin tahu layanan mana yang disediakan oleh rute tertentu (rute registri buruh pelabuhan):

# , , my-docker-registry.example.com
$ oc get routes -o=go-template='{{range .items}}{{if eq .spec.host "my-docker-registry.example.com"}}{{.metadata.name}}{{end}}{{end}}'
docker-registry

Atau, katakanlah Anda perlu tahu strategi penerapan router dc router:

#
$ oc get dc router -o=go-template='{{ .spec.strategy.type }}'
Rolling

Seperti yang Anda lihat, oc adalah tim yang luar biasa. Ini pasti layak untuk dimainkan, karena ini adalah salah satu hal paling keren tentang OpenShift.

Jika Anda ingin mempelajari lebih lanjut tentang fitur-fitur menarik dari OpenShift, kami sarankan Anda melihat blog Pengembang Red Hat kami - di sini Anda tidak hanya akan menemukan artikel dari pengembang kami di hampir semua topik, tetapi juga katalog besar literatur gratis . Dan Anda dapat menyegarkan pos kami tentang cara menggunakan Minishift di laptop Anda dan mulai hidup .

Source: https://habr.com/ru/post/id418437/


All Articles