1658817809
Trong bài viết này, bạn sẽ học cách tạo một cụm Kubernetes bằng Terraform và sau đó quản lý nó bằng Argo CD. Terraform rất hữu ích để tự động hóa cơ sở hạ tầng. Mặt khác, Argo CD giúp chúng tôi triển khai GitOps và phân phối liên tục cho các ứng dụng của chúng tôi. Có vẻ như chúng ta có thể kết hợp thành công cả hai công cụ này. Hãy xem xét cách họ có thể giúp chúng ta làm việc với Kubernetes theo kiểu GitOps.
Trước hết, tôi muốn xác định toàn bộ cụm và lưu trữ cấu hình của nó trong Git. Tôi không thể chỉ sử dụng Argo CD để đạt được nó, vì Argo CD phải chạy trên cụm Kubernetes hiện có. Đó là lý do tại sao tôi cần một công cụ có thể tạo một cụm và sau đó cài đặt Argo CD ở đó. Trong trường hợp đó, Terraform dường như là một lựa chọn tự nhiên. Mặt khác, tôi không muốn sử dụng Terraform để quản lý các ứng dụng chạy trên Kubernetes. Nó hoàn hảo cho hoạt động một lần như tạo một cụm, nhưng không hoàn hảo cho các tác vụ liên tục như phân phối ứng dụng và quản lý cấu hình.
Đây là danh sách những việc chúng tôi sẽ làm:
Application
chịu trách nhiệm về cấu hình toàn bộ cụm dựa trên GitApplication
cài đặt Strimzi Operator, tạo Argo CD Project
dành riêng cho cài đặt Kafka và Argo CD Application
chạy Kafka trên KubernetesĐiều quan trọng nhất ở đây là mọi thứ sẽ xảy ra sau khi chạy terraform apply
lệnh. Terraform cài đặt Argo CD, sau đó Argo CD cài đặt Kafka, đây là ứng dụng mẫu của chúng tôi trong trường hợp đó. Hãy xem nó hoạt động như thế nào.
Nếu bạn muốn thử nó một mình, bạn luôn có thể xem qua mã nguồn của tôi. Để làm được điều đó, bạn cần sao chép kho lưu trữ GitHub của tôi . Sau đó, bạn chỉ nên làm theo hướng dẫn của tôi. Hãy bắt đầu nào.
Để dễ dàng tạo một cụm Kubernetes, chúng ta sẽ sử dụng Kind . Có một nhà cung cấp Terraform dành riêng cho Kind có sẵn tại đây . Tất nhiên, bạn có thể chạy Kubernetes trên bất kỳ đám mây nào và bạn cũng sẽ tìm thấy các nhà cung cấp Terraform cho điều đó.
Cụm của chúng tôi bao gồm ba nút công nhân và một nút chính duy nhất. Chúng tôi cần ba nút vì cuối cùng, chúng tôi sẽ cài đặt một cụm Kafka chạy trong ba trường hợp. Mỗi người trong số họ sẽ được triển khai trên một nút khác nhau. main.tf
Đây là tệp Terraform của chúng tôi cho bước đó. Chúng ta cần xác định phiên bản mới nhất của tehcyx/kind
nhà cung cấp (chính là 0.0.12
) trong required_providers
phần này. Tên của cụm của chúng tôi là cluster1
. Chúng tôi cũng sẽ bật wait_for_ready
tùy chọn để tiến hành các bước tiếp theo sau khi cụm đã sẵn sàng.
terraform {
required_providers {
kind = {
source = "tehcyx/kind"
version = "0.0.12"
}
}
}
provider "kind" {}
resource "kind_cluster" "default" {
name = "cluster-1"
wait_for_ready = true
kind_config {
kind = "Cluster"
api_version = "kind.x-k8s.io/v1alpha4"
node {
role = "control-plane"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
}
}
Chỉ cần xác minh một cấu hình, bạn có thể chạy lệnh terraform init
và sau đó terraform plan
. Sau đó, bạn có thể áp dụng cấu hình bằng cách sử dụng terraform apply
, nhưng như bạn có thể nhớ rằng chúng tôi sẽ thực hiện điều đó sau khi tất cả cấu hình cuối cùng đã sẵn sàng để áp dụng mọi thứ trong một lệnh.
Như tôi đã đề cập trước đây, Trình quản lý vòng đời của nhà điều hành (OLM) là điều kiện tiên quyết để cài đặt nhà điều hành Strimzi Kafka. Bạn có thể tìm thấy bản phát hành mới nhất của OLM tại đây . Trên thực tế, nó phụ thuộc vào việc áp dụng hai biểu hiện YAML trên Kubernetes. Đầu tiên trong số chúng crds.yaml
chứa các định nghĩa CRD. Cái thứ hai trong số chúng olm.yaml
cung cấp tất cả các đối tượng Kubernetes cần thiết để cài đặt OLM. Hãy chỉ sao chép cả hai tệp này vào thư mục cục bộ bên trong kho lưu trữ Terraform của chúng tôi. Để áp dụng chúng cho Kubernetes, trước tiên chúng ta cần kích hoạt trình kubectl
cung cấp Terraform.
terraform {
...
required_providers {
kubectl = {
source = "gavinbunney/kubectl"
version = ">= 1.7.0"
}
}
}
Tại sao chúng tôi sử dụng kubectl
nhà cung cấp thay vì nhà cung cấp Terraform Kubernetes chính thức? Nó crds.yaml
chứa các CRD khá lớn vượt quá giới hạn kích thước. Chúng tôi có thể dễ dàng giải quyết vấn đề đó bằng cách cho phép áp dụng phía máy chủ trên kubectl
nhà cung cấp. Trường hợp tiếp theo là có nhiều đối tượng Kubernetes được xác định bên trong cả hai tệp YAML. Nhà kubectl
cung cấp hỗ trợ nó thông qua for_each
tham số.
data "kubectl_file_documents" "crds" {
content = file("olm/crds.yaml")
}
resource "kubectl_manifest" "crds_apply" {
for_each = data.kubectl_file_documents.crds.manifests
yaml_body = each.value
wait = true
server_side_apply = true
}
data "kubectl_file_documents" "olm" {
content = file("olm/olm.yaml")
}
resource "kubectl_manifest" "olm_apply" {
depends_on = [data.kubectl_file_documents.crds]
for_each = data.kubectl_file_documents.olm.manifests
yaml_body = each.value
}
Le's hãy xem xét trường hợp cuối cùng trong phần này. Trước khi áp dụng bất kỳ YAML nào, chúng tôi đang tạo một cụm Kubernetes mới trong bước trước. Do đó, chúng ta không thể sử dụng ngữ cảnh hiện có. May mắn thay, chúng ta có thể sử dụng các đối số đầu ra từ kubectl
nhà cung cấp với địa chỉ Kubernetes và thông tin xác thực.
provider "kubectl" {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
Đây là bước cuối cùng ở phía Terraform. Chúng tôi sẽ cài đặt Argo CD bằng biểu đồ Helm của nó. Chúng tôi cũng cần tạo một CD Argo duy nhất Application
chịu trách nhiệm quản lý cụm. Thao tác này Application
sẽ cài đặt toán tử Kafka Strimzi và tạo một đĩa CD Argo khác Application
được sử dụng, ví dụ như để chạy cụm Kafka. Trong bước đầu tiên, chúng ta cần làm điều tương tự như trước: xác định nhà cung cấp và đặt địa chỉ cụm Kubernetes. Đây là định nghĩa của chúng tôi trong Terraform:
provider "helm" {
kubernetes {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
}
Điều khó khăn ở đây là chúng ta cần tạo bản Application
cài đặt Argo CD ngay sau khi cài đặt. Theo mặc định, Terraform xác minh xem có các đối tượng CRD bắt buộc trên Kubernetes hay không. Trong trường hợp đó, nó yêu cầu Application
CRD từ argoproj.io/v1alpha1
. May mắn thay, chúng ta có thể sử dụng tham số biểu đồ Helm cho phép chúng ta chuyển khai báo các Application
s bổ sung. Để làm điều đó, chúng tôi phải thiết lập một values.yaml
tệp tùy chỉnh. Đây là khai báo Terraform cho cài đặt Argo CD:
resource "helm_release" "argocd" {
name = "argocd"
repository = "https://argoproj.github.io/argo-helm"
chart = "argo-cd"
namespace = "argocd"
version = "4.9.7"
create_namespace = true
values = [
file("argocd/application.yaml")
]
}
Để tạo ban đầu Application
, chúng ta cần sử dụng tham số biểu đồ Helm server.additionalApplications
như hình minh họa. Đây là toàn bộ argocd/application.yaml
tệp. Để đơn giản hóa, cấu hình được Argo CD sử dụng nằm trong kho lưu trữ dưới dạng cấu hình Terraform. Bạn có thể tìm thấy tất cả các YAML được yêu cầu trong thư mục argocd/manifests
.
server:
additionalApplications:
- name: cluster-config
namespace: argocd
project: default
source:
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
path: argocd/manifests/cluster
directory:
recurse: true
destination:
server: https://kubernetes.default.svc
syncPolicy:
automated:
prune: false
selfHeal: false
Hai bước cuối cùng được quản lý bởi Argo CD. Chúng tôi đã hoàn tất thành công quá trình cài đặt cụm Kubernetes. Bây giờ, đã đến lúc cài đặt ứng dụng đầu tiên của chúng tôi ở đó. Ứng dụng ví dụ của chúng tôi là Kafka. Vì vậy, trước tiên chúng ta cần cài đặt toán tử Kafka Strimzi. Để làm điều đó, chúng ta chỉ cần xác định một Subscription
đối tượng được quản lý bởi OLM đã được cài đặt trước đó. Định nghĩa có sẵn trong kho lưu trữ dưới dạng strimzi.yaml
tệp.
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: my-strimzi-kafka-operator
namespace: operators
spec:
channel: stable
name: strimzi-kafka-operator
source: operatorhubio-catalog
sourceNamespace: olm
Chúng tôi có thể cấu hình rất nhiều khía cạnh liên quan đến toàn bộ cụm ở đây. Tuy nhiên, chúng ta chỉ cần tạo một CD Argo chuyên dụng Project
và Application
cho cấu hình Kafka. Đây là Project
định nghĩa của chúng tôi:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: kafka
namespace: argocd
spec:
clusterResourceWhitelist:
- group: '*'
kind: '*'
destinations:
- name: '*'
namespace: '*'
server: '*'
sourceRepos:
- '*'
Hãy đặt kafka
ArgoCD Application
bên trong cái mới được tạo Project
.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kafka
namespace: argocd
spec:
destination:
namespace: kafka
server: https://kubernetes.default.svc
project: kafka
source:
path: argocd/manifests/kafka
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
syncPolicy:
syncOptions:
- CreateNamespace=true
Cuối cùng, phần cuối cùng của bài tập của chúng ta. Chúng tôi sẽ tạo và chạy một cụm Kafka 3 nút trên Kind. Đây là Kafka
định nghĩa đối tượng mà chúng tôi lưu trữ trong Git. Chúng tôi đang thiết lập 3 bản sao cho cả Kafka và Zookeeper (được sử dụng bởi cụm Kafka). Tệp kê khai này có sẵn trong kho lưu trữ theo đường dẫn argocd/manifests/kafka/cluster.yaml
. Chúng tôi đang hiển thị cụm trên các cổng 9092
(đồng bằng) và 9093
(TLS). Cụm Kafka có bộ lưu trữ được gắn như PVC vào Deployment
.
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
replicas: 3
version: 3.2.0
logging:
type: inline
loggers:
kafka.root.logger.level: "INFO"
config:
auto.create.topics.enable: "false"
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
default.replication.factor: 3
min.insync.replicas: 2
inter.broker.protocol.version: "3.2"
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 30Gi
deleteClaim: true
zookeeper:
replicas: 3
storage:
type: persistent-claim
size: 10Gi
deleteClaim: true
entityOperator:
topicOperator: {}
userOperator: {}
Chúng tôi cũng sẽ xác định một Chủ đề Kafka duy nhất bên trong argocd/manifests/kafka/cluster.yaml
tệp kê khai.
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 10
replicas: 3
Chúng tôi đã chuẩn bị tất cả các script được yêu cầu. Hãy chuyển sang giai đoạn thực hiện. Nếu bạn vẫn chưa nhân bản kho lưu trữ Git thì đã đến lúc làm điều đó:
$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd
Đầu tiên, hãy khởi tạo thư mục làm việc của chúng ta có chứa cấu hình Terraform:
$ terraform init
Sau khi thực hiện, chúng tôi có thể xem trước danh sách các hành động cần thực hiện:
$ terraform plan
Bạn sẽ nhận được một nội dung khá lớn dưới dạng phản hồi. Đây là phần cuối cùng trong kết quả của tôi:
Nếu mọi thứ đều ổn và không có lỗi, chúng tôi có thể tiến hành bước tiếp theo (cuối cùng). Hãy bắt đầu quá trình:
$ terraform apply
Tất cả 24 đối tượng sẽ được áp dụng thành công. Đây là phần cuối cùng của nhật ký:
Bây giờ, bạn nên chuẩn bị sẵn cụm của mình và đang chạy. Hãy hiển thị danh sách các cụm Kind:
$ kind get clusters
cluster-1
Tên của cụm của chúng tôi là cluster-1
. Nhưng tên của ngữ cảnh Kubernetes là kind-cluster-1
:
Hãy hiển thị danh sách các ứng dụng được triển khai trên cụm Kind. Bạn nên cài đặt ít nhất Argo CD và OLM. Sau một thời gian Argo CD áp dụng cấu hình được lưu trữ trong kho lưu trữ Git. Sau đó, bạn sẽ thấy toán tử Kafka Strimzi được cài đặt trong operators
không gian tên.
Sau đó, chúng ta có thể vào bảng điều khiển web Argo CD. Để truy cập dễ dàng trên cổng cục bộ, hãy kích hoạt port-forward
:
$ kubectl port-forward service/argocd-server 8443:443 -n argocd
Bây giờ, bạn có thể hiển thị bảng điều khiển web Argo CD trên https://localhost:8443
. Tên người dùng mặc định là admin
. Mật khẩu được tạo tự động bởi Argo CD. Bạn có thể tìm thấy nó bên trong Kubernetes Secret
argocd-initial-admin-secret
.
$ kubectl get secret argocd-initial-admin-secret -n argocd --template={{.data.password}} | base64 -D
Đây là danh sách các đĩa CD Argo của chúng tôi Application
. Cấu hình cụm đã bật tùy chọn tự động đồng bộ hóa. Nó cài đặt nhà điều hành Strimzi và tạo kafka
Ứng dụng Argo CD. Tôi cũng có thể bật tự động đồng bộ hóa cho kafka
Ứng dụng. Nhưng chỉ với mục đích demo, tôi đã để ở đó một phê duyệt thủ công. Vì vậy, hãy chạy Kafka trên cụm của chúng tôi. Để làm điều đó, hãy nhấp vào Sync
nút trên kafka
ô.
Sau khi bạn thực hiện, quá trình cài đặt Kafka sẽ bắt đầu. Cuối cùng, bạn nên chuẩn bị toàn bộ cụm đã sẵn sàng và đang chạy. Mỗi nút Kafka và Zookeeper đang chạy trên nút công nhân Kubernetes khác nhau:
Đó là tất cả. Chúng tôi đã tạo mọi thứ bằng cách sử dụng một lệnh Terraform và một cú nhấp chuột trên bảng điều khiển web Argo CD. Tất nhiên, chúng tôi có thể bật tự động đồng bộ hóa cho kafka
ứng dụng, vì vậy chúng tôi thậm chí không cần đăng nhập vào bảng điều khiển web Argo CD để có hiệu ứng cuối cùng.
Liên kết: https://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/
#terraform #kubernetes #argocd
1602964260
Last year, we provided a list of Kubernetes tools that proved so popular we have decided to curate another list of some useful additions for working with the platform—among which are many tools that we personally use here at Caylent. Check out the original tools list here in case you missed it.
According to a recent survey done by Stackrox, the dominance Kubernetes enjoys in the market continues to be reinforced, with 86% of respondents using it for container orchestration.
(State of Kubernetes and Container Security, 2020)
And as you can see below, more and more companies are jumping into containerization for their apps. If you’re among them, here are some tools to aid you going forward as Kubernetes continues its rapid growth.
(State of Kubernetes and Container Security, 2020)
#blog #tools #amazon elastic kubernetes service #application security #aws kms #botkube #caylent #cli #container monitoring #container orchestration tools #container security #containers #continuous delivery #continuous deployment #continuous integration #contour #developers #development #developments #draft #eksctl #firewall #gcp #github #harbor #helm #helm charts #helm-2to3 #helm-aws-secret-plugin #helm-docs #helm-operator-get-started #helm-secrets #iam #json #k-rail #k3s #k3sup #k8s #keel.sh #keycloak #kiali #kiam #klum #knative #krew #ksniff #kube #kube-prod-runtime #kube-ps1 #kube-scan #kube-state-metrics #kube2iam #kubeapps #kubebuilder #kubeconfig #kubectl #kubectl-aws-secrets #kubefwd #kubernetes #kubernetes command line tool #kubernetes configuration #kubernetes deployment #kubernetes in development #kubernetes in production #kubernetes ingress #kubernetes interfaces #kubernetes monitoring #kubernetes networking #kubernetes observability #kubernetes plugins #kubernetes secrets #kubernetes security #kubernetes security best practices #kubernetes security vendors #kubernetes service discovery #kubernetic #kubesec #kubeterminal #kubeval #kudo #kuma #microsoft azure key vault #mozilla sops #octant #octarine #open source #palo alto kubernetes security #permission-manager #pgp #rafay #rakess #rancher #rook #secrets operations #serverless function #service mesh #shell-operator #snyk #snyk container #sonobuoy #strongdm #tcpdump #tenkai #testing #tigera #tilt #vert.x #wireshark #yaml
1658817809
Trong bài viết này, bạn sẽ học cách tạo một cụm Kubernetes bằng Terraform và sau đó quản lý nó bằng Argo CD. Terraform rất hữu ích để tự động hóa cơ sở hạ tầng. Mặt khác, Argo CD giúp chúng tôi triển khai GitOps và phân phối liên tục cho các ứng dụng của chúng tôi. Có vẻ như chúng ta có thể kết hợp thành công cả hai công cụ này. Hãy xem xét cách họ có thể giúp chúng ta làm việc với Kubernetes theo kiểu GitOps.
Trước hết, tôi muốn xác định toàn bộ cụm và lưu trữ cấu hình của nó trong Git. Tôi không thể chỉ sử dụng Argo CD để đạt được nó, vì Argo CD phải chạy trên cụm Kubernetes hiện có. Đó là lý do tại sao tôi cần một công cụ có thể tạo một cụm và sau đó cài đặt Argo CD ở đó. Trong trường hợp đó, Terraform dường như là một lựa chọn tự nhiên. Mặt khác, tôi không muốn sử dụng Terraform để quản lý các ứng dụng chạy trên Kubernetes. Nó hoàn hảo cho hoạt động một lần như tạo một cụm, nhưng không hoàn hảo cho các tác vụ liên tục như phân phối ứng dụng và quản lý cấu hình.
Đây là danh sách những việc chúng tôi sẽ làm:
Application
chịu trách nhiệm về cấu hình toàn bộ cụm dựa trên GitApplication
cài đặt Strimzi Operator, tạo Argo CD Project
dành riêng cho cài đặt Kafka và Argo CD Application
chạy Kafka trên KubernetesĐiều quan trọng nhất ở đây là mọi thứ sẽ xảy ra sau khi chạy terraform apply
lệnh. Terraform cài đặt Argo CD, sau đó Argo CD cài đặt Kafka, đây là ứng dụng mẫu của chúng tôi trong trường hợp đó. Hãy xem nó hoạt động như thế nào.
Nếu bạn muốn thử nó một mình, bạn luôn có thể xem qua mã nguồn của tôi. Để làm được điều đó, bạn cần sao chép kho lưu trữ GitHub của tôi . Sau đó, bạn chỉ nên làm theo hướng dẫn của tôi. Hãy bắt đầu nào.
Để dễ dàng tạo một cụm Kubernetes, chúng ta sẽ sử dụng Kind . Có một nhà cung cấp Terraform dành riêng cho Kind có sẵn tại đây . Tất nhiên, bạn có thể chạy Kubernetes trên bất kỳ đám mây nào và bạn cũng sẽ tìm thấy các nhà cung cấp Terraform cho điều đó.
Cụm của chúng tôi bao gồm ba nút công nhân và một nút chính duy nhất. Chúng tôi cần ba nút vì cuối cùng, chúng tôi sẽ cài đặt một cụm Kafka chạy trong ba trường hợp. Mỗi người trong số họ sẽ được triển khai trên một nút khác nhau. main.tf
Đây là tệp Terraform của chúng tôi cho bước đó. Chúng ta cần xác định phiên bản mới nhất của tehcyx/kind
nhà cung cấp (chính là 0.0.12
) trong required_providers
phần này. Tên của cụm của chúng tôi là cluster1
. Chúng tôi cũng sẽ bật wait_for_ready
tùy chọn để tiến hành các bước tiếp theo sau khi cụm đã sẵn sàng.
terraform {
required_providers {
kind = {
source = "tehcyx/kind"
version = "0.0.12"
}
}
}
provider "kind" {}
resource "kind_cluster" "default" {
name = "cluster-1"
wait_for_ready = true
kind_config {
kind = "Cluster"
api_version = "kind.x-k8s.io/v1alpha4"
node {
role = "control-plane"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
}
}
Chỉ cần xác minh một cấu hình, bạn có thể chạy lệnh terraform init
và sau đó terraform plan
. Sau đó, bạn có thể áp dụng cấu hình bằng cách sử dụng terraform apply
, nhưng như bạn có thể nhớ rằng chúng tôi sẽ thực hiện điều đó sau khi tất cả cấu hình cuối cùng đã sẵn sàng để áp dụng mọi thứ trong một lệnh.
Như tôi đã đề cập trước đây, Trình quản lý vòng đời của nhà điều hành (OLM) là điều kiện tiên quyết để cài đặt nhà điều hành Strimzi Kafka. Bạn có thể tìm thấy bản phát hành mới nhất của OLM tại đây . Trên thực tế, nó phụ thuộc vào việc áp dụng hai biểu hiện YAML trên Kubernetes. Đầu tiên trong số chúng crds.yaml
chứa các định nghĩa CRD. Cái thứ hai trong số chúng olm.yaml
cung cấp tất cả các đối tượng Kubernetes cần thiết để cài đặt OLM. Hãy chỉ sao chép cả hai tệp này vào thư mục cục bộ bên trong kho lưu trữ Terraform của chúng tôi. Để áp dụng chúng cho Kubernetes, trước tiên chúng ta cần kích hoạt trình kubectl
cung cấp Terraform.
terraform {
...
required_providers {
kubectl = {
source = "gavinbunney/kubectl"
version = ">= 1.7.0"
}
}
}
Tại sao chúng tôi sử dụng kubectl
nhà cung cấp thay vì nhà cung cấp Terraform Kubernetes chính thức? Nó crds.yaml
chứa các CRD khá lớn vượt quá giới hạn kích thước. Chúng tôi có thể dễ dàng giải quyết vấn đề đó bằng cách cho phép áp dụng phía máy chủ trên kubectl
nhà cung cấp. Trường hợp tiếp theo là có nhiều đối tượng Kubernetes được xác định bên trong cả hai tệp YAML. Nhà kubectl
cung cấp hỗ trợ nó thông qua for_each
tham số.
data "kubectl_file_documents" "crds" {
content = file("olm/crds.yaml")
}
resource "kubectl_manifest" "crds_apply" {
for_each = data.kubectl_file_documents.crds.manifests
yaml_body = each.value
wait = true
server_side_apply = true
}
data "kubectl_file_documents" "olm" {
content = file("olm/olm.yaml")
}
resource "kubectl_manifest" "olm_apply" {
depends_on = [data.kubectl_file_documents.crds]
for_each = data.kubectl_file_documents.olm.manifests
yaml_body = each.value
}
Le's hãy xem xét trường hợp cuối cùng trong phần này. Trước khi áp dụng bất kỳ YAML nào, chúng tôi đang tạo một cụm Kubernetes mới trong bước trước. Do đó, chúng ta không thể sử dụng ngữ cảnh hiện có. May mắn thay, chúng ta có thể sử dụng các đối số đầu ra từ kubectl
nhà cung cấp với địa chỉ Kubernetes và thông tin xác thực.
provider "kubectl" {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
Đây là bước cuối cùng ở phía Terraform. Chúng tôi sẽ cài đặt Argo CD bằng biểu đồ Helm của nó. Chúng tôi cũng cần tạo một CD Argo duy nhất Application
chịu trách nhiệm quản lý cụm. Thao tác này Application
sẽ cài đặt toán tử Kafka Strimzi và tạo một đĩa CD Argo khác Application
được sử dụng, ví dụ như để chạy cụm Kafka. Trong bước đầu tiên, chúng ta cần làm điều tương tự như trước: xác định nhà cung cấp và đặt địa chỉ cụm Kubernetes. Đây là định nghĩa của chúng tôi trong Terraform:
provider "helm" {
kubernetes {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
}
Điều khó khăn ở đây là chúng ta cần tạo bản Application
cài đặt Argo CD ngay sau khi cài đặt. Theo mặc định, Terraform xác minh xem có các đối tượng CRD bắt buộc trên Kubernetes hay không. Trong trường hợp đó, nó yêu cầu Application
CRD từ argoproj.io/v1alpha1
. May mắn thay, chúng ta có thể sử dụng tham số biểu đồ Helm cho phép chúng ta chuyển khai báo các Application
s bổ sung. Để làm điều đó, chúng tôi phải thiết lập một values.yaml
tệp tùy chỉnh. Đây là khai báo Terraform cho cài đặt Argo CD:
resource "helm_release" "argocd" {
name = "argocd"
repository = "https://argoproj.github.io/argo-helm"
chart = "argo-cd"
namespace = "argocd"
version = "4.9.7"
create_namespace = true
values = [
file("argocd/application.yaml")
]
}
Để tạo ban đầu Application
, chúng ta cần sử dụng tham số biểu đồ Helm server.additionalApplications
như hình minh họa. Đây là toàn bộ argocd/application.yaml
tệp. Để đơn giản hóa, cấu hình được Argo CD sử dụng nằm trong kho lưu trữ dưới dạng cấu hình Terraform. Bạn có thể tìm thấy tất cả các YAML được yêu cầu trong thư mục argocd/manifests
.
server:
additionalApplications:
- name: cluster-config
namespace: argocd
project: default
source:
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
path: argocd/manifests/cluster
directory:
recurse: true
destination:
server: https://kubernetes.default.svc
syncPolicy:
automated:
prune: false
selfHeal: false
Hai bước cuối cùng được quản lý bởi Argo CD. Chúng tôi đã hoàn tất thành công quá trình cài đặt cụm Kubernetes. Bây giờ, đã đến lúc cài đặt ứng dụng đầu tiên của chúng tôi ở đó. Ứng dụng ví dụ của chúng tôi là Kafka. Vì vậy, trước tiên chúng ta cần cài đặt toán tử Kafka Strimzi. Để làm điều đó, chúng ta chỉ cần xác định một Subscription
đối tượng được quản lý bởi OLM đã được cài đặt trước đó. Định nghĩa có sẵn trong kho lưu trữ dưới dạng strimzi.yaml
tệp.
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: my-strimzi-kafka-operator
namespace: operators
spec:
channel: stable
name: strimzi-kafka-operator
source: operatorhubio-catalog
sourceNamespace: olm
Chúng tôi có thể cấu hình rất nhiều khía cạnh liên quan đến toàn bộ cụm ở đây. Tuy nhiên, chúng ta chỉ cần tạo một CD Argo chuyên dụng Project
và Application
cho cấu hình Kafka. Đây là Project
định nghĩa của chúng tôi:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: kafka
namespace: argocd
spec:
clusterResourceWhitelist:
- group: '*'
kind: '*'
destinations:
- name: '*'
namespace: '*'
server: '*'
sourceRepos:
- '*'
Hãy đặt kafka
ArgoCD Application
bên trong cái mới được tạo Project
.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kafka
namespace: argocd
spec:
destination:
namespace: kafka
server: https://kubernetes.default.svc
project: kafka
source:
path: argocd/manifests/kafka
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
syncPolicy:
syncOptions:
- CreateNamespace=true
Cuối cùng, phần cuối cùng của bài tập của chúng ta. Chúng tôi sẽ tạo và chạy một cụm Kafka 3 nút trên Kind. Đây là Kafka
định nghĩa đối tượng mà chúng tôi lưu trữ trong Git. Chúng tôi đang thiết lập 3 bản sao cho cả Kafka và Zookeeper (được sử dụng bởi cụm Kafka). Tệp kê khai này có sẵn trong kho lưu trữ theo đường dẫn argocd/manifests/kafka/cluster.yaml
. Chúng tôi đang hiển thị cụm trên các cổng 9092
(đồng bằng) và 9093
(TLS). Cụm Kafka có bộ lưu trữ được gắn như PVC vào Deployment
.
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
replicas: 3
version: 3.2.0
logging:
type: inline
loggers:
kafka.root.logger.level: "INFO"
config:
auto.create.topics.enable: "false"
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
default.replication.factor: 3
min.insync.replicas: 2
inter.broker.protocol.version: "3.2"
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 30Gi
deleteClaim: true
zookeeper:
replicas: 3
storage:
type: persistent-claim
size: 10Gi
deleteClaim: true
entityOperator:
topicOperator: {}
userOperator: {}
Chúng tôi cũng sẽ xác định một Chủ đề Kafka duy nhất bên trong argocd/manifests/kafka/cluster.yaml
tệp kê khai.
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 10
replicas: 3
Chúng tôi đã chuẩn bị tất cả các script được yêu cầu. Hãy chuyển sang giai đoạn thực hiện. Nếu bạn vẫn chưa nhân bản kho lưu trữ Git thì đã đến lúc làm điều đó:
$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd
Đầu tiên, hãy khởi tạo thư mục làm việc của chúng ta có chứa cấu hình Terraform:
$ terraform init
Sau khi thực hiện, chúng tôi có thể xem trước danh sách các hành động cần thực hiện:
$ terraform plan
Bạn sẽ nhận được một nội dung khá lớn dưới dạng phản hồi. Đây là phần cuối cùng trong kết quả của tôi:
Nếu mọi thứ đều ổn và không có lỗi, chúng tôi có thể tiến hành bước tiếp theo (cuối cùng). Hãy bắt đầu quá trình:
$ terraform apply
Tất cả 24 đối tượng sẽ được áp dụng thành công. Đây là phần cuối cùng của nhật ký:
Bây giờ, bạn nên chuẩn bị sẵn cụm của mình và đang chạy. Hãy hiển thị danh sách các cụm Kind:
$ kind get clusters
cluster-1
Tên của cụm của chúng tôi là cluster-1
. Nhưng tên của ngữ cảnh Kubernetes là kind-cluster-1
:
Hãy hiển thị danh sách các ứng dụng được triển khai trên cụm Kind. Bạn nên cài đặt ít nhất Argo CD và OLM. Sau một thời gian Argo CD áp dụng cấu hình được lưu trữ trong kho lưu trữ Git. Sau đó, bạn sẽ thấy toán tử Kafka Strimzi được cài đặt trong operators
không gian tên.
Sau đó, chúng ta có thể vào bảng điều khiển web Argo CD. Để truy cập dễ dàng trên cổng cục bộ, hãy kích hoạt port-forward
:
$ kubectl port-forward service/argocd-server 8443:443 -n argocd
Bây giờ, bạn có thể hiển thị bảng điều khiển web Argo CD trên https://localhost:8443
. Tên người dùng mặc định là admin
. Mật khẩu được tạo tự động bởi Argo CD. Bạn có thể tìm thấy nó bên trong Kubernetes Secret
argocd-initial-admin-secret
.
$ kubectl get secret argocd-initial-admin-secret -n argocd --template={{.data.password}} | base64 -D
Đây là danh sách các đĩa CD Argo của chúng tôi Application
. Cấu hình cụm đã bật tùy chọn tự động đồng bộ hóa. Nó cài đặt nhà điều hành Strimzi và tạo kafka
Ứng dụng Argo CD. Tôi cũng có thể bật tự động đồng bộ hóa cho kafka
Ứng dụng. Nhưng chỉ với mục đích demo, tôi đã để ở đó một phê duyệt thủ công. Vì vậy, hãy chạy Kafka trên cụm của chúng tôi. Để làm điều đó, hãy nhấp vào Sync
nút trên kafka
ô.
Sau khi bạn thực hiện, quá trình cài đặt Kafka sẽ bắt đầu. Cuối cùng, bạn nên chuẩn bị toàn bộ cụm đã sẵn sàng và đang chạy. Mỗi nút Kafka và Zookeeper đang chạy trên nút công nhân Kubernetes khác nhau:
Đó là tất cả. Chúng tôi đã tạo mọi thứ bằng cách sử dụng một lệnh Terraform và một cú nhấp chuột trên bảng điều khiển web Argo CD. Tất nhiên, chúng tôi có thể bật tự động đồng bộ hóa cho kafka
ứng dụng, vì vậy chúng tôi thậm chí không cần đăng nhập vào bảng điều khiển web Argo CD để có hiệu ứng cuối cùng.
Liên kết: https://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/
#terraform #kubernetes #argocd
1601051854
Kubernetes is a highly popular container orchestration platform. Multi cloud is a strategy that leverages cloud resources from multiple vendors. Multi cloud strategies have become popular because they help prevent vendor lock-in and enable you to leverage a wide variety of cloud resources. However, multi cloud ecosystems are notoriously difficult to configure and maintain.
This article explains how you can leverage Kubernetes to reduce multi cloud complexities and improve stability, scalability, and velocity.
Maintaining standardized application deployments becomes more challenging as your number of applications and the technologies they are based on increase. As environments, operating systems, and dependencies differ, management and operations require more effort and extensive documentation.
In the past, teams tried to get around these difficulties by creating isolated projects in the data center. Each project, including its configurations and requirements were managed independently. This required accurately predicting performance and the number of users before deployment and taking down applications to update operating systems or applications. There were many chances for error.
Kubernetes can provide an alternative to the old method, enabling teams to deploy applications independent of the environment in containers. This eliminates the need to create resource partitions and enables teams to operate infrastructure as a unified whole.
In particular, Kubernetes makes it easier to deploy a multi cloud strategy since it enables you to abstract away service differences. With Kubernetes deployments you can work from a consistent platform and optimize services and applications according to your business needs.
The Compelling Attributes of Multi Cloud Kubernetes
Multi cloud Kubernetes can provide multiple benefits beyond a single cloud deployment. Below are some of the most notable advantages.
Stability
In addition to the built-in scalability, fault tolerance, and auto-healing features of Kubernetes, multi cloud deployments can provide service redundancy. For example, you can mirror applications or split microservices across vendors. This reduces the risk of a vendor-related outage and enables you to create failovers.
#kubernetes #multicloud-strategy #kubernetes-cluster #kubernetes-top-story #kubernetes-cluster-install #kubernetes-explained #kubernetes-infrastructure #cloud
1622450760
Learn how to use Terraform to manage a highly-available Azure AKS Kubernetes cluster with Azure AD integration and Calico network policies enabled.
Azure Kubernetes Service (AKS) is a managed Kubernetes offering in Azure which lets you quickly deploy a production ready Kubernetes cluster. It allows customers to focus on application development and deployment, rather than the nitty gritties of Kubernetes cluster management. The cluster control plane is deployed and managed by Microsoft while the node and node pools where the applications are deployed, are handled by the customer.
The AKS cluster deployment can be fully automated using Terraform. Terraform enables you to safely and predictably create, change, and improve infrastructure. It also supports advanced AKS configurations, such as availability zones, Azure AD integration, and network policies for Kubernetes.
#kubernetes #kubernetes cluster #terraform #azure #aks
1658846897
In this article, you will learn how to create a Kubernetes cluster with Terraform and then manage it with Argo CD. Terraform is very useful for automating infrastructure. On the other hand, Argo CD helps us implement GitOps and continuous delivery for our applications. It seems that we can successfully combine both these tools. Let’s consider how they can help us to work with Kubernetes in the GitOps style.
See more at: https://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/
#terraform #kubernetes #argocd