Nhận YAML cho các dịch vụ Kubernetes đã triển khai?


105

Tôi đang cố gắng triển khai ứng dụng của mình cho Kubernetes chạy trong Google Container Engine .

Bạn có thể tìm thấy ứng dụng tại: https://github.com/Industrial/docker-znc .

Các Dockerfile được xây dựng thành một hình ảnh trên Google container Registry .

Tôi đã triển khai ứng dụng trong Kubernetes thông qua nút +. Tôi không có YAML cho việc này.

Tôi đã chèn một Bí mật trong Kubernetes cho tệp PEM mà ứng dụng yêu cầu.

  1. Làm cách nào để nhận YAML cho Triển khai , Dịch vụPod do Kubernetes tạo bằng cách điền vào biểu mẫu?
  2. Làm cách nào để đưa Bí mật vào Pod của tôi để sử dụng?

Câu trả lời:


155

Để lấy yaml cho việc triển khai (dịch vụ, nhóm, bí mật, v.v.):

kubectl get deploy deploymentname -o yaml --export

3
bất kỳ ý tưởng làm thế nào để làm điều đó cho toàn bộ cụm (tất cả các triển khai)? Tất nhiên, ý tưởng là tạo ra các môi trường phản chiếu với các dịch vụ giống hệt nhau.
Sinaesthetic 14/02/18

1
@Sinaesthetic, Tính đến nay, tính năng xuất Danh sách không được hỗ trợ và dường như sẽ không sớm ra mắt. Bạn có thể sẽ cần một tập lệnh để liệt kê tất cả các nguồn cung cấp lại sau đó chuyển qua các nguồn cung cấp đó để xây dựng danh sách của bạn. github.com/kubernetes/kubernetes/issues/…
mababin

18
Kể từ Kubernetes 1.14, --exportkhông được dùng nữa; xem ở đây . Bạn có thể sử dụng get -o yamlmà không cần --export, mặc dù điều đó bao gồm thông tin về trạng thái đối tượng hiện tại, cũng như cấu hình khai báo cần thiết để (lại) cấu hình đối tượng.
Josh Kelley

Ví dụ: vẫn cần phải xóa một số trạng thái hiện tại khỏi yaml được tạo bởi "-o yaml" spec.clusterIPmetadata.resourceVersiontrong dịch vụ.
Tony Lee

16

Làm cách nào để nhận YAML cho Triển khai, Dịch vụ và Pod do Kubernetes tạo bằng cách điền vào biểu mẫu?

kubectl get deployment,service,pod yourapp -o yaml --export

Trả lời câu hỏi của @Sinaesthetic:

bất kỳ ý tưởng làm thế nào để làm điều đó cho toàn bộ cụm (tất cả các triển khai)?

kubectl get deploy --all-namespaces -o yaml --export

Vấn đề với phương pháp này là việc xuất không bao gồm không gian tên. Vì vậy, nếu bạn muốn xuất nhiều tài nguyên cùng một lúc, tôi khuyên bạn nên làm điều đó trên không gian tên:

kubectl get deploy,sts,svc,configmap,secret -n default -o yaml --export > default.yaml

Thật không may, kubernetes vẫn không hỗ trợ lệnh get all true , vì vậy bạn cần liệt kê thủ công loại tài nguyên bạn muốn xuất. Bạn có thể nhận danh sách các loại tài nguyên với

kubectl api-resources

2
kubectl get $(kubectl api-resources | awk '{print $1}' | tail -n +2 | tr '\n' ',' | sed s/,\$//) -o yaml > manifest.yaml
mkingston

9

Vấn đề tương tự cũng được thảo luận tại trang vấn đề kubernetes GitHub và người dùng "alahijani" đã tạo một tập lệnh bash xuất tất cả yaml và ghi chúng vào các tệp và thư mục.

Vì câu hỏi này xếp hạng tốt trên Google và vì tôi thấy giải pháp đó rất tốt, tôi xin đại diện cho nó ở đây.

Bash script xuất yaml sang các thư mục con:

for n in $(kubectl get -o=name pvc,configmap,serviceaccount,secret,ingress,service,deployment,statefulset,hpa,job,cronjob)
do
    mkdir -p $(dirname $n)
    kubectl get -o=yaml --export $n > $n.yaml
done

Một người dùng khác "acondrat" đã tạo một tập lệnh không sử dụng thư mục, điều này giúp bạn dễ dàng tạo tập lệnh kubectl apply -fsau.

Bash script xuất yaml vào thư mục hiện tại:

for n in $(kubectl get -o=name pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob | grep -v 'secret/default-token')
do
    kubectl get -o=yaml --export $n > $(dirname $n)_$(basename $n).yaml
done

Tập lệnh cuối cùng không bao gồm tài khoản dịch vụ.


5

Cú pháp tải xuống yaml's từ kubernetes

kubectl get [resource type] -n [namespace] [resource Name] -o yaml> [Tên tệp mới]

Tạo tệp yaml từ pod đang chạy:

  1. kubectl get po -n nginx nginx-deploy-755cfc7dcf-5s7j8 -o yaml> podDetail.yaml

Tạo tệp yaml bản sao từ pod đang chạy:

  1. kubectl lấy rs -n nginx -o yaml> mới nhấtReplicaSet.yaml

Tạo tệp yaml triển khai từ nhóm đang chạy:

  1. kubectl nhận triển khai -n nginx -o yaml> mới nhấtDeployement.yaml

4

cho câu hỏi thứ 2 liên quan đến bí mật, đây là từ tài liệu k8s. xem https://kubernetes.io/docs/concept/configuration/secret/#using-secrets để biết thêm thông tin.

  1. Tạo bí mật hoặc sử dụng bí mật hiện có. Nhiều nhóm có thể tham chiếu cùng một bí mật.
  2. Sửa đổi định nghĩa Pod của bạn để thêm một khối lượng theo spec.volumes []. Đặt tên cho volume là bất kỳ thứ gì và có trường spec.volumes []. Secret.secretName bằng với tên của đối tượng bí mật.
  3. Thêm một spec.containers []. VolumeMounts [] vào mỗi vùng chứa cần bí mật. Chỉ định spec.containers []. VolumeMounts []. ReadOnly = true và spec.containers []. VolumeMounts []. MountPath vào tên thư mục không sử dụng nơi bạn muốn các bí mật xuất hiện.
  4. Sửa đổi hình ảnh và / hoặc dòng lệnh của bạn để chương trình tìm kiếm các tệp trong thư mục đó. Mỗi khóa trong bản đồ dữ liệu bí mật trở thành tên tệp trong mountPath.

Tôi đã sử dụng cái này và nó hoạt động tốt.


4
  • Giống như đã đề cập ở trên "--export" là một tùy chọn để lấy tệp kê khai tương ứng với các đối tượng kubeernetes
  • Nhưng "--export" được coi là có lỗi và có một đề xuất không dùng nữa
  • Hiện tại, tùy chọn tốt hơn là thực hiện "-o yaml" hoặc "-o json" và xóa các trường không cần thiết
  • Sự khác biệt chính là "--export" dự kiến ​​sẽ loại bỏ các cài đặt cụ thể của cụm (ví dụ: IP dịch vụ cụm của dịch vụ k8s). Nhưng nó được tìm thấy là không nhất quán trong vấn đề này

3

Sử dụng lệnh này để nhận định dạng yaml của dịch vụ của bạn

kubectl get service servicename -n <namespace> -o yaml

Bạn cũng có thể đưa nó vào một số tệp

kubectl get service servicename -n <namespace> -o yaml > service.yaml


0
kubectl -n <namespace> get <resource type> <resource Name> -o yaml 

Với lệnh trên, bất kỳ tài nguyên nào được xác định trong Kubernetes đều có thể được xuất theo YAMLđịnh dạng.


0

Nếu bạn cần xem và chỉnh sửa tệp, hãy sử dụng:

kubectl edit service servicename


0
  1. Bạn có thể lấy các tệp yaml của các tài nguyên bằng lệnh này

    kubectl -n <namespace> get <resource type> <resource Name> -o yaml

  2. Để có được bí mật trong nhóm của bạn,

sử dụng một cái gì đó như thế này

env
- valueFrom
    secretKeyRef:
      name: secret_name
      key: key_name

hoặc là

envFrom
- secretRef:
    name: secret_name

 

0

Tôi biết nó là quá cũ để trả lời, nhưng hy vọng, ai đó sẽ thấy nó hữu ích.

Chúng ta có thể thử lệnh dưới đây để tìm nạp một loại xuất từ ​​tất cả không gian tên -

kubectl get <kind> --all-namespaces --export -o yaml
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.