Kubernetes olayları, pod oluşturma, çalıştırma ve silme gibi kümenizdeki durum değişikliklerini veya bileşen hatalarını kaydeder. K8s olay merkezi, tüm Kubernetes küme olaylarını gerçek zamanlı olarak toplar ve depolama, sorgulama, analiz, görselleştirme ve uyarı olanakları sunar. Bu konuda, bir K8s olay merkezi oluşturma ve kullanma yordamı açıklanmaktadır.
Arka plan bilgileri
Kubernetes mimarisi bir durum makinesine dayanır. Sistem durumlar arasında geçiş yaptığında olaylar üretilir. Normal durumlar arasındaki geçişler Normal olayları üretirken, normal ve anormal durumlar arasındaki geçişler Warning olayları üretir.
ACK (Container Service for Kubernetes), konteyner ortamları için hazır bir olay izleme çözümü sağlar. ACK tarafından bakımı yapılan node-problem-detector (NPD) ve buna dahil olan kube-eventer bileşenini kullanarak olay izleme hizmeti sunar.
node-problem-detector (NPD), Kubernetes düğümlerini tanılamak için kullanılan bir araçtır. Docker Engine takılmaları, Linux çekirdeği takılmaları, genel ağ erişim istisnaları ve dosya tanımlayıcı sorunları gibi düğüm anormalliklerini düğüm olaylarına dönüştürür. kube-eventer ile birlikte kullanıldığında, düğüm olayları için kapalı döngülü bir uyarı sistemi sağlar.
kube-eventer, Kubernetes olaylarını arşivlemek amacıyla ACK tarafından bakımı yapılan açık kaynaklı bir araçtır. Küme olaylarını DingTalk, Simple Log Service (SLS) ve EventBridge gibi harici sistemlere aktarabilir. Ayrıca olay düzeylerine göre filtreleme olanakları da sunar. Bu sayede olayların gerçek zamanlı toplanması, hedeflenen uyarılar ve eşzamansız arşivleme mümkün olur.
Ön koşullar
Bir Alibaba Cloud ACK kümesi veya ACK Serverless cluster gibi bir Kubernetes kümesi oluşturmuş olmanız gerekir.
Faturalama
Aşağıdaki koşullar sağlandığında K8s olay merkezi ücretsizdir:
K8s olay merkeziyle ilişkili Logstore'un veri saklama süresi 90 gündür (varsayılan değer).
K8s olay merkezine yazılan veri miktarı günlük 256 MB'tan azdır (yaklaşık 250.000 olay).
Örnekler:
Varsayılan 90 günlük veri saklama süresini kullanıyorsanız ve Kubernetes kümeniz günde 1.000 olay üretiyorsa K8s olay merkezi ücretsizdir.
Veri saklama süresini 105 güne ayarlarsanız ve Kubernetes kümeniz günde 1.000 olay üretiyorsa, 90 günden sonra Logstore depolama ücreti ödersiniz. Faturalandırılan öğe 'dır ve günlük ücret yaklaşık 0,1 CNY'dir. Log Storage faturalandırılan öğesi hakkında daha fazla bilgi için bkz. Özellik bazlı ödeme modundaki faturalandırılan öğeler.
Adım 1: kube-eventer ve node-problem-detector dağıtma
ACK
Bir ACK kümesi kullanıyorsanız, hem kube-eventer hem de node-problem-detector işlevlerini entegre ettiği için yalnızca ack-node-problem-detector bileşenini dağıtmanız yeterlidir. Bir ACK Serverless cluster kullanıyorsanız kube-eventer bileşenini dağıtmanız gerekir.
NPD, düğüm sorunlarını algılamak ve ilgili küme olaylarını oluşturmak için yapılandırmalar ve üçüncü taraf eklentiler kullanır. Bir Kubernetes kümesi ayrıca pod tahliyesi veya görüntü çekme hataları gibi durum geçişleri sırasında kendi olaylarını da üretir. Simple Log Service (SLS) Kubernetes Olay Merkezi, tüm Kubernetes olaylarını gerçek zamanlı olarak merkezileştirir ve depolama, sorgulama, analiz, görselleştirme ve uyarı özellikleri sunar. Küme olaylarınızı Kubernetes Olay Merkezi ile entegre etmek için aşağıdaki adımları izleyin:
Küme oluşturma sırasında Install node-problem-detector and Create Event Center seçeneğini seçtiyseniz Kubernetes Olay Merkezini görüntülemek için doğrudan Adım 2'ye geçebilirsiniz. Küme oluşturma sırasında NPD bileşeninin nasıl yükleneceği hakkında bilgi için bkz. Yönetilen bir ACK kümesi oluşturma.
-
Küme oluşturma sırasında Install node-problem-detector and Create Event Center seçeneğini seçmediyseniz manuel olarak yüklemek için şu adımları izleyin.
ACK konsoluna giriş yapın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.
Clusters sayfasında hedef kümenin adına tıklayın. Sol gezinme bölmesinde yolunu izleyin.
Logs and Monitoring sekmesinde ack-node-problem-detector öğesini bulun ve yükleyin.
Self-managed Kubernetes
-
kube-eventerdağıtın.kubectl yükleyin. Daha fazla bilgi için bkz. Kümenin kubeconfig dosyasını alma ve kubectl ile kümeye bağlanma.
-
Aşağıdaki şablona göre eventer.yaml adlı bir yapılandırma dosyası oluşturun.
apiVersion: apps/v1 kind: Deployment metadata: labels: name: kube-eventer name: kube-eventer namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kube-eventer template: metadata: labels: app: kube-eventer annotations: scheduler.alpha.kubernetes.io/critical-pod: '' spec: dnsPolicy: ClusterFirstWithHostNet serviceAccount: kube-eventer containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/kube-eventer:v1.2.5-cc7ec54-aliyun name: kube-eventer command: - "/kube-eventer" - "--source=kubernetes:https://kubernetes.default" ## .send to sls ## --sink=sls:https://{endpoint}?project={project}&logStore=k8s-event®ionId={region-id}&internal=false&accessKeyId={accessKeyId}&accessKeySecret={accessKeySecret} - --sink=sls:https://cn-beijing.log.aliyuncs.com?project=k8s-xxxx&logStore=k8s-event®ionId=cn-beijing&internal=false&accessKeyId=xxx&accessKeySecret=xxx env: # If TZ is assigned, set the TZ value as the time zone - name: TZ value: "Asia/Shanghai" volumeMounts: - name: localtime mountPath: /etc/localtime readOnly: true - name: zoneinfo mountPath: /usr/share/zoneinfo readOnly: true resources: requests: cpu: 10m memory: 50Mi limits: cpu: 500m memory: 250Mi volumes: - name: localtime hostPath: path: /etc/localtime - name: zoneinfo hostPath: path: /usr/share/zoneinfo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-eventer rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-eventer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-eventer subjects: - kind: ServiceAccount name: kube-eventer namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: kube-eventer namespace: kube-system
Parameter
Type
Required
Description
endpoint
string
Yes
Simple Log Service uç noktası. Daha fazla bilgi için bkz. Uç noktalar.
project
string
Yes
Simple Log Service projesi.
logStore
string
Yes
Simple Log Service Logstore'u.
internal
string
Self-managed Kubernetes kümeleri için gereklidir.
Bir self-managed Kubernetes kümesi için bu parametreyi false olarak ayarlamanız gerekir.
regionId
string
Self-managed Kubernetes kümeleri için gereklidir.
Simple Log Service'in bulunduğu bölgenin kimliği. Daha fazla bilgi için bkz. Uç noktalar.
accessKeyId
string
Self-managed Kubernetes kümeleri için gereklidir.
AccessKey kimliği. Resource Access Management (RAM) kullanıcısının AccessKey çiftini kullanmanızı öneririz. Daha fazla bilgi için bkz. AccessKey çifti.
accessKeySecret
string
Self-managed Kubernetes kümeleri için gereklidir.
AccessKey gizli anahtarı. Resource Access Management (RAM) kullanıcısının AccessKey çiftini kullanmanızı öneririz. Daha fazla bilgi için bkz. AccessKey çifti. -
eventer.yamlyapılandırmasını kümeye uygulamak için aşağıdaki komutu çalıştırın.kubectl apply -f eventer.yamlBeklenen çıktı:
deployment.apps/kube-eventer created clusterrole.rbac.authorization.k8s.io/kube-eventer created clusterrolebinding.rbac.authorization.k8s.io/kube-eventer created serviceaccount/kube-eventer created
node-problem-detectordağıtın.
Adım 2: K8s olay merkezi örneği oluşturma
Bir K8s olay merkezi örneği oluşturduktan sonra Simple Log Service, hedef projede otomatik olarak k8s-event adlı bir Logstore ve ilgili panolar oluşturur.
Simple Log Service konsolunda oturum açın.
Log Application bölümünde Intelligent O&M sekmesine tıklayın ve ardından K8s Event Center seçeneğine tıklayın.
Event Center Management sayfasında sağ üst köşede bulunan Add seçeneğine tıklayın.
-
Create Event Center panelinde parametreleri yapılandırın ve Next seçeneğine tıklayın.
Select Existing Project seçeneğini belirlerseniz K8s olay merkezi örneğinin kaynaklarını (Logstore ve panolar gibi) yönetmek için Project açılır listesinden mevcut bir proje seçin.
Select Kubernetes Cluster from Container Service for Kubernetes seçeneğini belirlerseniz K8s Cluster açılır listesinden mevcut bir K8s kümesi seçin. Bu yöntemi kullanırsanız Simple Log Service, K8s olay merkezi örneğinin kaynaklarını (Logstore ve panolar gibi) yönetmek için
k8s-log-{cluster-id}adlı bir proje otomatik olarak oluşturur.
Adım 3: K8s olay merkezi örneğini kullanma
Bir K8s olay merkezi örneği oluşturup kube-eventer ve node-problem-detector dağıttıktan sonra olay merkezini kullanmaya başlayabilirsiniz. Olay özetini görüntüleyebilir, olay ayrıntılarını sorgulayabilir, pod yaşam döngüsünü inceleyebilir, düğüm olaylarını ve çekirdek bileşen olaylarını görüntüleyebilir, uyarıları yapılandırabilir, özel sorgular çalıştırabilir ve sürümü güncelleyebilirsiniz.
K8s Event Center sayfasında hedef K8s olay merkezi örneğini bulun ve aşağıdaki işlemleri yapmak için
simgesine tıklayın.
Eylemler | Açıklama |
Olay özetini görüntüleme | Event Overview sayfası, çekirdek olayların özet istatistiklerini gösterir. İstatistikler arasında toplam olay sayısı, bugün ve dün arasındaki hata olaylarının karşılaştırılması, uyarı istatistikleri, hata olayı eğilimleri ve pod OOM ayrıntıları yer alır. Not Pod OOM bilgileri belirli podu tanımlamaz. Yalnızca olayın gerçekleştiği düğümü, işlem adını ve işlem kimliğini bulabilirsiniz. Belirli podu belirlemenize yardımcı olmak için pod OOM zamanına yakın gerçekleşen pod yeniden başlatma olaylarını bulmak amacıyla özel bir sorgu çalıştırabilirsiniz. |
Olay ayrıntılarını sorgulama | Event Detail Query sayfası, olay türü, olay nesnesi, ana bilgisayar, ad alanı ve ad gibi çeşitli boyutlara göre filtrelenmiş olayların ayrıntılarını gösterir. |
Pod yaşam döngüsünü görüntüleme | Pod Lifecycle sayfası, bir podun yaşam döngüsündeki olayların grafiksel zaman çizelgesini gösterir. Ayrıca önemli pod olaylarını olay düzeyine göre filtreleyebilirsiniz. |
Düğüm olaylarını görüntüleme | Node Events sayfası, düğüm yaşam döngüsü ve olay listesi gibi düğüm olayı ayrıntılarını gösterir. |
Çekirdek bileşen olaylarını görüntüleme | Core Component Events sayfası, ECS yeniden başlatma hataları ve uygulanmamış URL modları gibi çekirdek bileşen olaylarının ayrıntılarını gösterir. |
Uyarı ayarlama | Alert Configuration sayfasında K8s olay merkezi için uyarılar yapılandırabilirsiniz. Daha fazla bilgi için bkz. Uyarı ayarlama. |
Özel sorgular çalıştırma | Custom Query sayfasında sorgu ifadelerini ve analitik ifadelerini özelleştirebilirsiniz. K8s olay merkezindeki tüm olaylar bir Logstore'da depolandığından özel sorgular, olay tüketimi, özel raporlar ve özel uyarılar gibi tüm Logstore özelliklerini kullanabilirsiniz. Daha fazla bilgi için bkz. Sorgulama ve analize hızlı başlangıç. K8s olay merkezi örneğiyle ilişkili projeye erişmek için proje adını aşağıdaki yollardan biriyle bulabilirsiniz:
|
Sürümü güncelleme | Version Update sayfasında K8s olay merkezini yükseltebilirsiniz. |
K8s olay merkezi örneğini silme
sayfasında örneği bulun ve Actions sütunundaki
simgesine tıklayın.
Örnek günlük
Aşağıdaki kod bir örnek günlüğü gösterir.
hostname: cn-hangzhou.i-***********"
level: Normal
pod_id: 2a360760-****
pod_name: logtail-ds-blkkr
event_id: {
"metadata":{
"name":"logtail-ds-blkkr.157b7cc90de7e192",
"namespace":"kube-system",
"selfLink":"/api/v1/namespaces/kube-system/events/logtail-ds-blkkr.157b7cc90de7e192",
"uid":"2aaf75ab-****",
"resourceVersion":"6129169",
"creationTimestamp":"2019-01-20T07:08:19Z"
},
"involvedObject":{
"kind":"Pod",
"namespace":"kube-system",
"name":"logtail-ds-blkkr",
"uid":"2a360760-****",
"apiVersion":"v1",
"resourceVersion":"6129161",
"fieldPath":"spec.containers{logtail}"
},
"reason":"Started",
"message":"Started container",
"source":{
"component":"kubelet",
"host":"cn-hangzhou.i-***********"
},
"firstTimestamp":"2019-01-20T07:08:19Z",
"lastTimestamp":"2019-01-20T07:08:19Z",
"count":1,
"type":"Normal",
"eventTime":null,
"reportingComponent":"",
"reportingInstance":""
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SSS
Bir K8s olay merkezi örneğinde veri yok
Bir K8s olay merkezi örneği dağıttıktan sonra yeni olaylar otomatik olarak toplanır. Bunları Custom Query sayfasında arayabilirsiniz. Sağ üst köşedeki zaman aralığını 1 Gün olarak ayarlamanızı öneririz. Veri bulunamazsa genellikle iki neden vardır:
-
K8s olay merkezini dağıttığınızdan beri Kubernetes kümesinde yeni olay üretilmemiştir.
Kümede yeni olayların üretilip üretilmediğini kontrol etmek için
kubectl get events --all-namespaceskomutunu çalıştırabilirsiniz. -
kube-eventervenode-problem-detectordağıtımınızda parametreler yanlış yapılandırılmıştır.-
Bir Container Service for Kubernetes (ACK) kümesi kullanıyorsanız şu adımları uygulayın:
ACK konsolunda oturum açın.
Clusters sayfasında hedef kümenin adına tıklayın.
Sol gezinme bölmesinde yolunu izleyin.
Helm sayfasında ack-node-problem-detector öğesini bulun ve Update seçeneğine tıklayın.
Parametre ayarlarını kontrol edin ve değiştirin. Daha fazla bilgi için bkz. Adım 1: kube-eventer ve node-problem-detector dağıtma.
Bir self-managed Kubernetes kümesi kullanıyorsanız parametre ayarları için bkz. Kubernetes olaylarını toplama.
-
Bir olay için konteyner günlüklerini nasıl görüntülerim?
-
Bir Container Service for Kubernetes (ACK) kümesi kullanıyorsanız şu adımları uygulayın:
ACK konsolunda oturum açın.
Clusters sayfasında hedef kümenin adına tıklayın.
Sol gezinme bölmesinde yolunu izleyin.
Namespace değerini kube-system olarak ayarlayın.
Pods listesinde hedef podu bulun ve Log seçeneğine tıklayın.
Bir self-managed Kubernetes kümesi kullanıyorsanız kube-system ad alanında dosya adı ön eki
eventer-slsolan Pod'ların günlüklerini kontrol edin.