Tôi đã có ngăn xếp EFK trên cụm kubernetes trong AWS EKS và tôi dự định thêm chức năng ghi nhật ký s3 cho các nhóm tìm kiếm đàn hồi trong es-statefulset. Đối với điều này, tôi đã tạo một hình ảnh elaticseach tùy chỉnh nơi tôi đã thêm plugin kho lưu trữ-s3 và sau đó thêm một bộ chứa init để lưu trữ thông tin đăng nhập AWS trong tệp yaml es-statefulset. Nhưng khi áp dụng các thay đổi, phần elaticseach pods của es statefulset không thành công với 'Lỗi'.
Cấu hình statefulset như sau:
apiVersion: apps/v1 # Phiên bản API của kubernetes có sẵn `StatefulSet`. Đối với Kubernetes 1.8.7, các ứng dụng/v1beta1 của nó
loại: StatefulSet # Loại tài nguyên mà chúng tôi đang tạo
siêu dữ liệu: # Giữ siêu dữ liệu cho tài nguyên này
tên: es # Tên của tài nguyên này
không gian tên: nhật ký kube
nhãn: # Siêu dữ liệu bổ sung đi vào bên trong nhãn. Nó dành cho tài nguyên trạng thái
thành phần: elaticsearch # Chỉ là siêu dữ liệu chúng tôi đang thêm
spec: # Giữ thông số kỹ thuật của tài nguyên này
bản sao: 5 # Chịu trách nhiệm duy trì số lượng bản sao nhất định
bộ chọn:
trận đấuNhãn:
thành phần: elaticsearch
serviceName: elaticsearch # Tên dịch vụ, được yêu cầu bởi statefulset
mẫu: # Mẫu chứa thông số kỹ thuật của nhóm sẽ được tạo và duy trì bởi statefulset
siêu dữ liệu: # Giữ siêu dữ liệu cho nhóm
nhãn: # Siêu dữ liệu bổ sung đi vào bên trong nhãn. Nó dành cho nhóm
thành phần: elaticsearch # Chỉ là siêu dữ liệu cho nhóm
spec: # Giữ thông số kỹ thuật của nhóm
initContainers: # sẽ luôn khởi tạo trước các vùng chứa khác trong nhóm
- tên: init-sysctl # Tên của bộ chứa init
hình ảnh: busybox # Hình ảnh sẽ được triển khai trong vùng chứa này
imagePullPolicy: IfNotPresent # Đặt chính sách chỉ lấy hình ảnh từ sổ đăng ký nếu nó không có sẵn cục bộ
lệnh: ["sysctl", "-w", "vm.max_map_count=262144"] # Đặt biến hệ thống trong vùng chứa, giá trị này được yêu cầu bởi ES
securityContext: # Security context giữ bất kỳ quyền đặc biệt nào được cấp cho vùng chứa này
đặc quyền: đúng # Vùng chứa này có quyền chạy ở chế độ riêng tư
- tên: add-aws-keys
hình ảnh: xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
vi:
- tên: AWS_ACCESS_KEY_ID
giá trịTừ:
bí mậtKeyRef:
tên: aws-s3-keys
khóa: truy cập-key-id
- tên: AWS_SECRET_ACCESS_KEY
giá trịTừ:
bí mậtKeyRef:
tên: aws-s3-keys
khóa: khóa bí mật truy cập
chỉ huy:
- sh
- -c
- |
tiếng vang $AWS_ACCESS_KEY_ID | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.access_key
tiếng vang $AWS_SECRET_ACCESS_KEY | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.secret_key
container: # Giữ danh sách và cấu hình của các container thông thường trong nhóm
- name: es # Tên của container đầu tiên
securityContext: # Security context giữ bất kỳ quyền đặc biệt nào được cấp cho vùng chứa này
khả năng: # Bộ chứa sẽ có khả năng Khóa IPC, có thể khóa trên bộ nhớ để không bị tráo đổi.
cộng:
- IPC_LOCK
hình ảnh: xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
env: # mảng biến môi trường có giá trị được truyền vào ảnh này
- tên: KUBERNETES_CA_CERTIFICATE_FILE
giá trị: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- tên: KHÔNG GIAN TÊN
giá trịTừ:
trường Tham khảo:
trườngPath: metadata.namespace
- tên: "CLUSTER_NAME"
giá trị: "myesdb1"
- tên: "DISCOVERY_SERVICE"
giá trị: "elasticsearch"
- tên: MẠNG_HOST
giá trị: "_eth0_"
- tên: ES_JAVA_OPTS #Chỉ định Kích thước Heap
giá trị: -Xms1536m -Xmx1536m
cổng: # Cổng mà nhóm này sẽ mở
- Cảng container: 9200
tên: http
giao thức: TCP
- Cảng container: 9300
tên: vận chuyển
giao thức: TCP
volumeMounts: # Đường dẫn nơi âm lượng sẽ được gắn vào.
- đường dẫn gắn kết:/dữ liệu
tên: lưu trữ # Tên được đặt cho thú cưỡi này
cập nhậtchiến lược:
loại: CánUpdate
volumeClaimTemplates: # Nó cung cấp dung lượng lưu trữ ổn định bằng cách sử dụng PersistentVolumes được cung cấp bởi PersistentVolume Provider
- siêu dữ liệu: # Siêu dữ liệu được cung cấp cho tài nguyên này (Yêu cầu khối lượng liên tục)
tên: lưu trữ # Tên của tài nguyên này
spec: # Đặc điểm kỹ thuật của PVC này (Yêu cầu khối lượng không đổi)
storageClassName: gp2 # Lớp lưu trữ được sử dụng để cung cấp PVC này
accessModes: [ ReadWriteOnce ] # Chế độ truy cập của ổ đĩa
tài nguyên: # Giữ danh sách tài nguyên
yêu cầu: # Yêu cầu được gửi đến lớp lưu trữ
lưu trữ: 100Gi
Nhóm mô tả đưa ra những điều sau đây:
$ kubectl description pod/es-0 -n kube-logging
Tên: es-0
Không gian tên: nhật ký kube
Ưu tiên: 0
Nút: ip-xxxxxxxxxxxx.ap-southeast-1.compute.internal/xxxxxxxxx
Thời gian bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:23:44 +0000
Nhãn: component=elaticsearch
bộ điều khiển-sửa đổi-hash=es-7dc4b7477c
statefulset.kubernetes.io/pod-name=es-0
Chú thích: kubernetes.io/psp:eks.privileged
Tình trạng: Đang chạy
IP: xxxxxxxxxxxxxx
IP:
IP: xxxxxxxxxxxxxx
Được kiểm soát bởi: StatefulSet/es
Bộ chứa ban đầu:
init-sysctl:
ID vùng chứa: docker://291ab715d302d7f505925168685955ad20c529e4db3371c3385e911614d60179
Hình ảnh: busybox
ID hình ảnh: docker-pullable://busybox@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
Cổng: <không có>
Cổng máy chủ: <none>
Chỉ huy:
hệ thống
-w
vm.max_map_count=262144
Trạng thái: Đã chấm dứt
Lý do: Đã hoàn thành
Mã thoát: 0
Bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:23:50 +0000
Kết thúc: Thu, 19/08/2021 16:23:50 +0000
Sẵn sàng: Đúng
Số lần khởi động lại: 0
Môi trường: <không>
gắn kết:
/var/run/secrets/kubernetes.io/serviceaccount từ default-token-9nv96 (ro)
add-aws-key:
ID vùng chứa: docker://23e3335b99c8a5bf144f2f2a52c1bbd357a667205ce335ead5e0627ecdf403e9
Hình ảnh: xxxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
ID hình ảnh: docker-pullable://xxxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes@sha256:c09d586a4bdc7149c41ff74783bae0138f68c4779f03315b197e7dda1c4332c6
Cổng: <không có>
Cổng máy chủ: <none>
Chỉ huy:
sh
-c
tiếng vang $AWS_ACCESS_KEY_ID | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.access_key
tiếng vang $AWS_SECRET_ACCESS_KEY | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.secret_key
Trạng thái: Đã chấm dứt
Lý do: Đã hoàn thành
Mã thoát: 0
Bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:23:50 +0000
Kết thúc: Thu, 19/08/2021 16:23:53 +0000
Sẵn sàng: Đúng
Số lần khởi động lại: 0
Môi trường:
AWS_ACCESS_KEY_ID: <đặt thành khóa 'access-key-id' trong bí mật 'aws-s3-keys'> Tùy chọn: sai
AWS_SECRET_ACCESS_KEY: <đặt thành khóa 'access-secret-key' trong 'aws-s3-keys' bí mật> Tùy chọn: sai
gắn kết:
/var/run/secrets/kubernetes.io/serviceaccount từ default-token-9nv96 (ro)
Hộp đựng:
là:
ID vùng chứa: docker://a26a4cf4ed98f0f6dd535069e8a5c54dbf39746a04e8a14fbacb0c51ff4684ec
Hình ảnh: xxxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
ID hình ảnh: docker-pullable://xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes@sha256:c09d586a4bdc7149c41ff74783bae0138f68c4779f03315b197e7dda1c4332c6
Cổng: 9200/TCP, 9300/TCP
Cổng máy chủ: 0/TCP, 0/TCP
Trạng thái: Chờ đợi
Lý do: CrashLoopBackOff <<<<<<<<<<<
Trạng thái cuối cùng: Đã chấm dứt <<<<<<<<<<<<<<<<<
Lý do: Lỗi
Mã thoát: 1
Bắt đầu: Thứ năm, ngày 19 tháng 8 năm 2021 16:50:16 +0000
Kết thúc: Thu, 19/08/2021 16:50:17 +0000
Sẵn sàng: Sai
Số lần khởi động lại: 10
Môi trường:
KUBERNETES_CA_CERTIFICATE_FILE: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
NAMESPACE: ghi nhật ký kube (v1:metadata.namespace)
CLUSTER_NAME: myesdb1
DISCOVERY_SERVICE: elaticsearch
MẠNG_HOST: _eth0_
ES_JAVA_OPTS: -Xms1536m -Xmx1536m
gắn kết:
/dữ liệu từ bộ lưu trữ (rw)
/var/run/secrets/kubernetes.io/serviceaccount từ default-token-9nv96 (ro)
Điều kiện:
Loại Trạng thái
Khởi tạo đúng
Sẵn sàng Sai
ContainerSẵn sàng Sai
PodScheduled True
tập:
kho:
Loại: PersistentVolumeClaim (tham chiếu đến PersistentVolumeClaim trong cùng một không gian tên)
Tên yêu cầu: lưu trữ-es-0
Chỉ đọc: sai
mặc định-token-9nv96:
Loại: Bí mật (một tập được điền bởi một Bí mật)
SecretName: default-token-9nv96
Tùy chọn: sai
Lớp QoS: BestEffort
Bộ chọn nút: <none>
Dung sai: node.kubernetes.io/not-ready:NoExecute trong 300 giây
node.kubernetes.io/unreachable:NoExecute trong 300 giây
Sự kiện:
Nhập Lý do Tuổi từ Tin nhắn
---- ------ ---- ---- -------
Bình thường Đã lên lịch Trình lập lịch trình mặc định 29 phút Đã gán thành công kube-logging/es-0 cho ip-xxxxxxx.ap-southeast-1.compute.internal
Bình thường Thành côngAttachVolume Bộ điều khiển đính kèm 29m AttachVolume.Attach đã thành công cho tập "pvc-2abce33a-7193-4070-b4da-74486e72d568"
Kéo bình thường 29m kubelet Hình ảnh thùng chứa "busybox" đã có trên máy
Đã tạo bình thường 29m kubelet Đã tạo vùng chứa init-sysctl
Bắt đầu bình thường 29m kubelet Đã bắt đầu container init-sysctl
Bình thường được kéo 29m kubelet Container image "xxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2" đã có trên máy
Đã tạo bình thường 29m kubelet Đã tạo container-aws-keys
Đã bắt đầu bình thường 29m kubelet Đã bắt đầu container add-aws-keys
Đã tạo bình thường 29m (x4 trên 29m) kubelet Đã tạo container es
Bắt đầu bình thường 29m (x4 trên 29m) kubelet Bắt đầu container es
Kéo bình thường 28m (x5 trên 29m) Hình ảnh bộ chứa kubelet "xxxxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2" đã có trên máy
Cảnh báo BackOff 4m46s (x115 trên 29m) kubelet Back-off khởi động lại container không thành công
Nhật ký nhóm đưa ra lỗi sau liên quan đến AccessDeniedException: /elasticsearch/config/elasticsearch.keystore:
$ nhật ký kubectl pod/es-0 -n kube-logging
Bắt đầu Elaticsearch 6.4.2
Ngoại lệ trong chuỗi "chính" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /elasticsearch/config/elasticsearch.keystore
Nguyên nhân gốc rễ có thể xảy ra: java.nio.file.AccessDeniedException: /elasticsearch/config/elasticsearch.keystore <<<<<<<<<<<<
tại sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
tại sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
tại sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
tại sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
tại java.nio.file.Files.newByteChannel(Files.java:361)
tại java.nio.file.Files.newByteChannel(Files.java:407)
tại org.apache.lucene.store.SimpleFSDirectory.openInput(SimpleFSDirectory.java:77)
tại org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:215)
tại org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:226)
tại org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:291)
tại org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136)
tại org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127)
tại org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
tại org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
tại org.elasticsearch.cli.Command.main(Command.java:90)
tại org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)
tại org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86)
Tham khảo nhật ký để biết chi tiết lỗi đầy đủ.
Nghiên cứu sâu hơn về vấn đề này, tôi đã tìm thấy một số liên kết liên quan đến vấn đề này chỉ ra vấn đề với vị trí kho khóa trong vùng chứa elaticsearch và một số định dạng khóa trong gcp: https://github.com/elastic/cloud-on-k8s/issues/4124 https://discuss.elastic.co/t/access-denied-error-on-keystore-when-using-eck/276297
nhưng tôi không chắc cách giải quyết vấn đề này như trong AWS, hơn nữa khi tôi thử thêm trực tiếp thông tin đăng nhập trong khi tạo hình ảnh tùy chỉnh, nó đã được thêm thành công mà không gặp bất kỳ lỗi nào (đã kiểm tra bằng cách khởi động bộ chứa từ hình ảnh tùy chỉnh được tạo bằng Dockerfile):
...
Bước 6/8 : CHẠY echo $AWS_ACCESS_KEY_ID | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.access_key
---> Đang chạy ở 42f5231573a7
Đã tạo kho khóa elaticsearch trong /elasticsearch/config
Tháo bình chứa trung gian 42f5231573a7
---> 3b202f355a8b
Bước 7/8 : CHẠY echo $AWS_SECRET_ACCESS_KEY | bin/elasticsearch-keystore thêm --stdin --force s3.client.default.secret_key
---> Chạy trong 644e555f2362
Tháo container trung gian 644e555f2362
---> d08abcc761ce
Bước 8/8: RUN cài đặt bin/elasticsearch-plugin --batch repository-s3
---> Chạy trong d21d7d4fbb7b
-> Đang tải xuống kho lưu trữ-s3 từ đàn hồi
[================================================= ] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
@ CẢNH BÁO: plugin yêu cầu quyền bổ sung @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
* java.lang.RuntimePermission truy cậpDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.reflect.ReflectPermission triệt tiêuAccessChecks
* java.net.SocketPermission * kết nối, giải quyết
* java.util.PropertyPermission es.allow_insecure_settings đọc, ghi
Xem http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
để biết mô tả về những gì các quyền này cho phép và các rủi ro liên quan.
-> Đã cài đặt kho lưu trữ-s3
Đang xóa vùng chứa trung gian d21d7d4fbb7b
---> 19f4588f1f7f
Build thành công 19f4588f1f7f
Đã gắn thẻ thành công xxxxxxx.dkr.ecr.ap-southeast-1.amazonaws.com/myes:6.4.2
Ngoài ra, xin lưu ý rằng tôi đã thử thay đổi quyền của /elasticsearch/config/elasticsearch.keystore thành 777 nhưng điều đó cũng không giúp được gì.
Tôi sẽ đánh giá cao một số trợ giúp về vấn đề này.