উৎপাদনে Kubernetes ক্লাস্টার চালানো এক জিনিস। এমন একটি চালানো যা অপ্রত্যাশিত ট্র্যাফিক স্পাইকগুলিকে শোষণ করতে পারে, নিয়ন্ত্রণ-প্লেন ব্যর্থতা থেকে বাঁচতে পারে, ভাড়াটে বিচ্ছিন্নতা প্রয়োগ করতে পারে এবং আপনার অপারেশন টিমকে সিস্টেমের প্রতিটি স্তরে স্পষ্ট দৃশ্যমানতা দিতে পারে - এটি একটি সম্পূর্ণ ভিন্ন চ্যালেঞ্জ। RKE2, Rancher এর পরবর্তী প্রজন্মের Kubernetes ডিস্ট্রিবিউশন, বিশেষভাবে এমন পরিবেশের জন্য তৈরি করা হয়েছে যেখানে এই প্রয়োজনীয়তাগুলি আলোচনার অযোগ্য।
এই নিবন্ধটি একটি প্রোডাকশন-গ্রেড RKE2 স্থাপনার সম্পূর্ণ জীবনচক্রের মাধ্যমে কাজ করে: প্রাথমিক ক্লাস্টার আর্কিটেকচার, পড এবং নোড স্তরে অটোস্কেলিং, উচ্চ-প্রাপ্যতা নিয়ন্ত্রণ প্লেন, রিসোর্স গভর্নেন্স, এবং Prometheus এবং Grafana এর সাথে পর্যবেক্ষণযোগ্যতা।
কেন RKE2?
RKE2 আপস্ট্রিম Kubernetes থেকে এবং এর পূর্বসূরি RKE1 থেকে তিনটি গুরুত্বপূর্ণ ক্ষেত্রে নিজেকে আলাদা করে। প্রথমত, এটি বক্সের বাইরে একটি CIS Kubernetes বেঞ্চমার্ক-কঠিন কনফিগারেশন সহ পাঠানো হয় — ভর্তি নিয়ন্ত্রক, অডিট লগিং, পড নিরাপত্তা, এবং TLS সেটিংস ম্যানুয়াল হস্তক্ষেপ ছাড়াই একটি CIS লেভেল 1 স্ক্যান পাস করার জন্য পূর্ব-কনফিগার করা হয়। দ্বিতীয়ত, এটি FIPS 140-2 অনুগত, এটি সরকারী এবং নিয়ন্ত্রিত-শিল্প স্থাপনার জন্য উপযুক্ত করে তোলে। তৃতীয়ত, এটি কনটেইনারকে সরাসরি এম্বেড করে এবং তার নিজস্ব CNI (খাল বা সিলিয়াম আপনার কনফিগারেশন পছন্দের উপর নির্ভর করে) দিয়ে জাহাজে করে, যা আপনাকে পরিচালনা করতে হবে এমন বাহ্যিক নির্ভরতার পৃষ্ঠের ক্ষেত্রফলকে হ্রাস করে।
RKE2ও এয়ার-গ্যাপ ফ্রেন্ডলি। ইনস্টলেশন বান্ডেলে সমস্ত প্রয়োজনীয় কন্টেইনার ইমেজ অন্তর্ভুক্ত রয়েছে, যা অন-প্রাঙ্গনে এবং প্রান্ত স্থাপনে অত্যন্ত গুরুত্বপূর্ণ যেখানে ক্লাস্টার নোড থেকে ইন্টারনেট অ্যাক্সেস সীমাবদ্ধ বা অসম্ভব।
ক্লাস্টার আর্কিটেকচার
একটি প্রোডাকশন RKE2 ক্লাস্টার সার্ভার নোড (যা কন্ট্রোল প্লেন এবং etcd চালায়) এবং এজেন্ট নোড (যা ওয়ার্কলোড চালায়) বিভক্ত। উচ্চ প্রাপ্যতার জন্য প্রস্তাবিত টপোলজি হল তিন বা পাঁচটি সার্ভার নোড এবং একটি পরিবর্তনশীল সংখ্যক এজেন্ট নোড যা নোড পুলে কাজের চাপ শ্রেণি দ্বারা সংগঠিত।
# /etc/rancher/rke2/config.yaml (server node)
token: <shared-cluster-token>
tls-san:
- 10.0.0.10 # VIP or load balancer address
- k8s.internal.example.com
cni: cilium
cluster-cidr: 10.42.0.0/16
service-cidr: 10.43.0.0/16
etcd-expose-metrics: true
kube-apiserver-arg:
- "audit-log-path=/var/log/kubernetes/audit.log"
- "audit-log-maxage=30"
- "audit-log-maxsize=100"# /etc/rancher/rke2/config.yaml (agent node)
server: https://10.0.0.10:9345
token: <shared-cluster-token>
node-label:
- "workload-class=general"
- "topology.kubernetes.io/zone=eu-west-1a"আপনার প্রথম কন্ট্রোল-প্লেন নোডে সার্ভারটি ইনস্টল করুন, তারপর একই টোকেন এবং VIP ঠিকানা ব্যবহার করে অবশিষ্ট সার্ভার নোড এবং সমস্ত এজেন্ট নোডগুলিতে যোগদান করুন৷ RKE2 স্বয়ংক্রিয়ভাবে etcd নেতা নির্বাচন করে এবং কোরাম পরিচালনা করে।
# Install and start RKE2 server
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE=server sh -
systemctl enable --now rke2-server.service
# Retrieve the node token for joining additional nodes
cat /var/lib/rancher/rke2/server/node-token
# Install and start RKE2 agent (on worker nodes)
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE=agent sh -
systemctl enable --now rke2-agent.serviceনোড পুল এবং ওয়ার্কলোড প্লেসমেন্ট
সমস্ত ওয়ার্কলোডের একই রিসোর্স প্রোফাইল নেই। স্টেটলেস ওয়েব পরিষেবাগুলির GPU অনুমান কাজ, মেমরি-ইনটেনসিভ অ্যানালিটিক্স ওয়ার্কলোড বা লেটেন্সি-সংবেদনশীল ডেটাবেস থেকে আলাদা প্রয়োজনীয়তা রয়েছে৷ এজেন্ট নোডগুলিকে স্বতন্ত্র লেবেল এবং দাগ দিয়ে পুলগুলিতে সংগঠিত করা Kubernetes প্রতিটি কাজের চাপ ক্লাসকে যথাযথ আকারের হার্ডওয়্যারে নির্ধারণ করতে দেয়।
# Label a node pool for memory-intensive workloads
kubectl label nodes worker-mem-{1..4} workload-class=memory-optimised
kubectl taint nodes worker-mem-{1..4} workload-class=memory-optimised:NoSchedule
# Label a separate pool for general compute
kubectl label nodes worker-gen-{1..8} workload-class=general# Deployment targeting the memory-optimised pool
apiVersion: apps/v1
kind: Deployment
metadata:
name: analytics-engine
spec:
template:
spec:
nodeSelector:
workload-class: memory-optimised
tolerations:
- key: workload-class
operator: Equal
value: memory-optimised
effect: NoSchedule
containers:
- name: analytics
image: registry.internal/analytics:v2.3.1
resources:
requests:
memory: "8Gi"
cpu: "2"
limits:
memory: "16Gi"
cpu: "4"অনুভূমিক পড অটোস্ক্যালার
অনুভূমিক পড অটোস্ক্যালার (HPA) পর্যবেক্ষণ করা মেট্রিক্সের উপর ভিত্তি করে একটি স্থাপনা বা স্টেটফুলসেটের রেপ্লিকা গণনা সামঞ্জস্য করে। CPU ব্যবহার হল ক্লাসিক ট্রিগার, কিন্তু আধুনিক HPA কনফিগারেশনগুলি আপনার অ্যাপ্লিকেশন দ্বারা প্রকাশিত কাস্টম মেট্রিক্স বা বার্তা সারির গভীরতার মতো উত্স থেকে বাহ্যিক মেট্রিক্সের উপরও স্কেল করতে পারে।
প্রথমে, নিশ্চিত করুন যে মেট্রিক্স সার্ভার চলছে — RKE2 এটিকে ডিফল্টরূপে বান্ডিল করে না।
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlapiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-server-hpa
namespace: production
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 65
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # wait 5 minutes before scaling down
policies:
- type: Percent
value: 25
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 30behaviorব্লক স্থিতিশীলতার জন্য গুরুত্বপূর্ণ। একটি স্কেল-ডাউন স্ট্যাবিলাইজেশন উইন্ডো ছাড়া, একটি সংক্ষিপ্ত ট্র্যাফিক ড্রপ অকালে পডগুলিকে সরিয়ে দেবে, যখন লোড ফেরত আসে তখন আপনাকে আন্ডার-প্রভিশন করা হয়। অ্যাসিমেট্রিক নীতি — আক্রমনাত্মক স্কেল-আপ, রক্ষণশীল স্কেল-ডাউন — বেশিরভাগ উত্পাদন কাজের চাপের জন্য সঠিক ডিফল্ট।
উল্লম্ব পড অটোস্ক্যালার
ভার্টিকাল পড অটোস্ক্যালার (VPA) CPU এবং মেমরির অনুরোধগুলিকে পর্যবেক্ষণ করা ব্যবহারের উপর ভিত্তি করে পৃথক পডগুলিতে ডান আকার দেয়। এটি একটি সাধারণ সমস্যার সমাধান করে: বিকাশকারীরা অনুমানের উপর ভিত্তি করে প্রাথমিক রিসোর্স অনুরোধগুলি সেট করে এবং সেই মানগুলি কখনই আপডেট হয় না, যা হয় অযথা অত্যধিক প্রভিশনিং বা লোডের নিচে OOMKilled পডের দিকে পরিচালিত করে।
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: worker-vpa
namespace: production
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: background-worker
updatePolicy:
updateMode: "Auto" # or "Off" to only view recommendations
resourcePolicy:
containerPolicies:
- containerName: worker
minAllowed:
cpu: 100m
memory: 256Mi
maxAllowed:
cpu: 4
memory: 8Gi
controlledResources: ["cpu", "memory"]মনে রাখবেন যেAutoমোডে VPA নতুন রিসোর্স মান প্রয়োগ করতে পডগুলিকে উচ্ছেদ করবে এবং পুনরায় চালু করবে। পরিষেবাগুলির জন্য যেখানে ইন-ফ্লাইট অনুরোধগুলিকে বাধা দেওয়া যায় না,Offমোডে VPA চালান যা আপনি ম্যানুয়ালি বা GitOps ওয়ার্কফ্লো রক্ষণাবেক্ষণ উইন্ডোর সময় প্রয়োগ করার জন্য সুপারিশগুলি তৈরি করতে পারেন৷
গুরুত্বপূর্ণ:HPA এবং VPA একই সাথে একই স্থাপনায় একই সংস্থান (CPU বা মেমরি) পরিচালনা করা উচিত নয়৷ CPU-চালিত অনুভূমিক স্কেলিং-এর জন্য HPA এবং মেমরির ডান-আকারের জন্যOffমোডে VPA ব্যবহার করুন, অথবা ইভেন্ট-চালিত স্কেলিং-এর জন্যKEDAব্যবহার করুন যেখানে সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন হয়৷
ক্লাস্টার অটোস্ক্যালার
পড অটোস্ক্যালার বিদ্যমান নোড ক্ষমতার মধ্যে কাজ করে। যখন সেই ক্ষমতা শেষ হয়ে যায় — পডগুলিPending-এ আটকে থাকে কারণ কোনও নোডে পর্যাপ্ত সংস্থান নেই — নতুন নোডগুলি সরবরাহ করার জন্য আপনার ক্লাস্টার অটোস্ক্যালার প্রয়োজন৷ বিপরীতভাবে, যখন নোডগুলি উল্লেখযোগ্যভাবে কম-ব্যবহার করা হয়, তখন ক্লাস্টার অটোস্ক্যালার পরিকাঠামোর খরচ কমাতে তাদের নিষ্কাশন এবং ডিকমিশন করতে পারে।
বেয়ার-মেটাল বা অন-প্রিমিসেস ডিপ্লোয়মেন্টে, ক্লাস্টার অটোস্ক্যালার আপনার অবকাঠামো প্রভিশনিং লেয়ারের সাথে একীভূত হয়। ক্লাউড স্থাপনার জন্য, প্রদানকারী যেমন AWS, GCP, এবং Azure নেটিভ নোড গ্রুপ ইন্টিগ্রেশন অফার করে। নিম্নলিখিত উদাহরণটি একটি AWS অটো স্কেলিং গ্রুপের মূল কনফিগারেশন দেখায়।
apiVersion: apps/v1
kind: Deployment
metadata:
name: cluster-autoscaler
namespace: kube-system
spec:
template:
spec:
containers:
- name: cluster-autoscaler
image: registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.0
command:
- ./cluster-autoscaler
- --cloud-provider=aws
- --nodes=2:10:k8s-general-worker-asg
- --nodes=1:4:k8s-memory-worker-asg
- --scale-down-delay-after-add=10m
- --scale-down-unneeded-time=10m
- --scale-down-utilization-threshold=0.5
- --skip-nodes-with-local-storage=false
- --expander=least-waste
env:
- name: AWS_REGION
value: eu-west-1--expander=least-wasteবিকল্পটি অটোস্কেলারকে সেই নোড গোষ্ঠীকে পছন্দ করতে বলে যেটিতে মুলতুবি থাকা পডকে সামঞ্জস্য করার পরে অব্যবহৃত সংস্থানের ক্ষুদ্রতম পরিমাণ থাকবে, যা খরচ কমিয়ে দেয়। বিকল্প সম্প্রসারণকারীদের মধ্যে রয়েছেrandom,most-pods, এবংpriority৷
উচ্চ প্রাপ্যতা নিয়ন্ত্রণ প্লেন
এমবেডেড etcd সহ একটি থ্রি-নোড কন্ট্রোল প্লেন হল ন্যূনতম কার্যকর HA টপোলজি। etcd-এর জন্য কোরাম প্রয়োজন — ক্লাস্টারের লেখাগুলি গ্রহণ করার জন্য বেশিরভাগ সদস্যকে অবশ্যই সুস্থ হতে হবে। তিন সদস্যের সাথে আপনি একটি ব্যর্থতা সহ্য করতে পারেন; পাঁচ সদস্যের সাথে আপনি দুইজনকে সহ্য করতে পারেন।
কন্ট্রোল-প্লেন নোডগুলি অবশ্যই একটি লোড ব্যালেন্সারের পিছনে বসতে হবে৷ ক্লাউড স্থাপনার জন্য, একটি TCP লোড ব্যালেন্সার টার্গেটিং পোর্ট 6443 (kube-apiserver) এবং 9345 (RKE2 রেজিস্ট্রেশন) ভাল কাজ করে। অন-প্রিমিসেস স্থাপনায় সাধারণত একটি ভার্চুয়াল আইপি ঠিকানা সহ Keepalived ব্যবহার করা হয়।
# keepalived.conf on control-plane nodes
vrrp_instance VI_1 {
state MASTER # BACKUP on the other two nodes
interface eth0
virtual_router_id 51
priority 100 # 90 and 80 on the other two nodes
advert_int 1
authentication {
auth_type PASS
auth_pass securepassword
}
virtual_ipaddress {
10.0.0.10/24 # VIP used in tls-san and agent server address
}
}যেকোন কন্ট্রোল-প্লেন অপারেশনের পর etcd সুস্থ কিনা তা যাচাই করুন। RKE2 বান্ডেলetcdctlএ/var/lib/rancher/rke2/bin/etcdctl।
ETCDCTL_API=3 /var/lib/rancher/rke2/bin/etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt \
--cert=/var/lib/rancher/rke2/server/tls/etcd/client.crt \
--key=/var/lib/rancher/rke2/server/tls/etcd/client.key \
endpoint health --clusterরিসোর্স কোটা এবং সীমা রেঞ্জ
৷মাল্টি-টেন্যান্ট ক্লাস্টারে — যেখানে বিভিন্ন দল বা অ্যাপ্লিকেশন একই ভৌত অবকাঠামো ভাগ করে — রিসোর্সকোটাস এবং লিমিটেরাঞ্জগুলি হল অপরিহার্য রেলপথ। ResourceQuotas একটি নামস্থানের মধ্যে মোট সম্পদ খরচের উপর হার্ড ক্যাপ সেট করে। LimitRanges পৃথক কন্টেইনারগুলির জন্য ডিফল্ট এবং সর্বোচ্চ মান সেট করে, অসীম সম্পদের অনুরোধ করা থেকে একটি ভুল কনফিগার করা স্থাপনা প্রতিরোধ করে।
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-alpha-quota
namespace: team-alpha
spec:
hard:
requests.cpu: "20"
requests.memory: 40Gi
limits.cpu: "40"
limits.memory: 80Gi
count/deployments.apps: "20"
count/services: "15"
persistentvolumeclaims: "10"
requests.storage: 500GiapiVersion: v1
kind: LimitRange
metadata:
name: team-alpha-limits
namespace: team-alpha
spec:
limits:
- type: Container
default:
cpu: 500m
memory: 512Mi
defaultRequest:
cpu: 100m
memory: 128Mi
max:
cpu: "8"
memory: 16Gi
- type: PersistentVolumeClaim
max:
storage: 100GiLimitRanges প্রয়োগ করা নিশ্চিত করে যে ডেভেলপাররা যারা রিসোর্স অনুরোধগুলি নির্দিষ্ট করতে ভুলে যান তারা শূন্য CPU অনুরোধ করার পরিবর্তে এখনও বুদ্ধিমান ডিফল্ট পান, যার ফলে শিডিয়ুলার যে কোনও জায়গায় পড স্থাপন করতে পারে এবং একই নোডে অন্যান্য কাজের চাপকে ক্ষুধার্ত করে ফেলতে পারে।
Prometheus এবং Grafanaসহমনিটরিং একটি Kubernetes ক্লাস্টারে
পর্যবেক্ষণযোগ্যতার তিনটি স্তম্ভ রয়েছে: মেট্রিক্স, লগ এবং ট্রেস। Prometheus মেট্রিক্স সংগ্রহ পরিচালনা করে; Grafana ভিজ্যুয়ালাইজেশন পরিচালনা করে।kube-prometheus-stackHelm চার্ট পুরো স্ট্যাককে স্থাপন করে — Prometheus অপারেটর, অ্যালার্ট ম্যানেজার, Grafana, নোড রপ্তানিকারক, এবং পূর্ব-নির্মিত ড্যাশবোর্ডগুলির একটি বিস্তৃত সেট — একটি একক কমান্ডে।
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set prometheus.prometheusSpec.retention=30d \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.storageClassName=longhorn \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=100Gi \
--set grafana.adminPassword=<secure-password> \
--set alertmanager.alertmanagerSpec.storage.volumeClaimTemplate.spec.resources.requests.storage=10Giসার্ভার কনফিগারেশনেetcd-expose-metrics: trueসেট করা থাকলেRKE2 etcd মেট্রিক্স প্রকাশ করে। একটি সার্ভিস মনিটর যোগ করুন যাতে Prometheus তাদের স্ক্র্যাপ করে।
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: rke2-etcd
namespace: monitoring
labels:
release: kube-prometheus-stack
spec:
namespaceSelector:
matchNames: [kube-system]
selector:
matchLabels:
app.kubernetes.io/name: rke2-etcd
endpoints:
- port: metrics
scheme: https
tlsConfig:
caFile: /etc/prometheus/secrets/etcd-client-cert/ca.crt
certFile: /etc/prometheus/secrets/etcd-client-cert/client.crt
keyFile: /etc/prometheus/secrets/etcd-client-cert/client.keyপ্রয়োজনীয় সতর্কতার নিয়ম
প্রাক-নির্মিত ড্যাশবোর্ডগুলি হল একটি সূচনা বিন্দু, কিন্তু আপনার পরিবেশের সাথে সংযুক্ত কাস্টম সতর্কতা বিধি যা ব্যবহারকারীদের কোনো সমস্যা লক্ষ্য করার আগে অন-কল ইঞ্জিনিয়ারদের কাজ করার অনুমতি দেয়৷
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: workload-alerts
namespace: monitoring
labels:
release: kube-prometheus-stack
spec:
groups:
- name: pod-health
rules:
- alert: PodCrashLooping
expr: rate(kube_pod_container_status_restarts_total[10m]) > 0.5
for: 5m
labels:
severity: critical
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} is crash-looping"
- alert: NodeMemoryPressure
expr: |
(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) < 0.1
for: 2m
labels:
severity: warning
annotations:
summary: "Node {{ $labels.node }} memory below 10%"
- alert: HPAMaxedOut
expr: |
kube_horizontalpodautoscaler_status_current_replicas
== kube_horizontalpodautoscaler_spec_max_replicas
for: 15m
labels:
severity: warning
annotations:
summary: "HPA {{ $labels.namespace }}/{{ $labels.horizontalpodautoscaler }} at maximum replicas"HPAMaxedOutসতর্কতা অনুশীলনে বিশেষভাবে মূল্যবান। যখন একটি HPA একটি বর্ধিত সময়ের জন্য তার সর্বাধিক পিন করা হয় তার মানে ট্র্যাফিক আপনার বর্তমান সিলিং ছাড়িয়ে গেছে। আপনাকে হয় সর্বাধিক বাড়াতে হবে বা নোড পুলে ক্ষমতা যোগ করতে হবে — এবং আপনি পরবর্তী স্পাইকের আগে এটি সম্পর্কে জানতে চান, এটির সময় নয়।
উত্পাদনের সেরা অনুশীলনগুলি
৷পড ব্যাহত বাজেট
একটি PodDisruptionBudget (PDB) সীমাবদ্ধ করে যে নোড ড্রেনের মতো স্বেচ্ছাসেবী বাধার সময় একটি স্থাপনায় কতগুলি পড একই সাথে অনুপলব্ধ হতে পারে। PDB ব্যতীত, রক্ষণাবেক্ষণের জন্য একটি নোড নিষ্কাশন করা একটি সম্পূর্ণ স্থাপনা অফলাইনে নিতে পারে।
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: api-server-pdb
namespace: production
spec:
minAvailable: 2 # or use maxUnavailable: 1
selector:
matchLabels:
app: api-serverটপোলজি স্প্রেড সীমাবদ্ধতা
ডিফল্টরূপে, সময়সূচী সর্বোত্তম প্রচেষ্টার অ্যালগরিদম ব্যবহার করে নোড জুড়ে প্রতিলিপি ছড়িয়ে দেয়। টপোলজি স্প্রেড সীমাবদ্ধতা আপনাকে কঠিন গ্যারান্টি দেয় যে প্রতিলিপিগুলি প্রাপ্যতা অঞ্চল বা র্যাকগুলিতে বিতরণ করা হয়।
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: api-serverআপগ্রেড কৌশল
RKE2 সিস্টেম আপগ্রেড কন্ট্রোলারের মাধ্যমে রোলিং আপগ্রেড সমর্থন করে। আপনি একটি পরিকল্পনা সংজ্ঞায়িত করেন যা সার্ভার বা এজেন্ট নোডকে লক্ষ্য করে এবং লক্ষ্য সংস্করণ নির্দিষ্ট করে; কন্ট্রোলার ক্রমানুসারে নোডগুলিকে ড্রেন, আপগ্রেড এবং আনকর্ডন করে।
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: rke2-server-upgrade
namespace: system-upgrade
spec:
concurrency: 1
cordon: true
nodeSelector:
matchExpressions:
- { key: node-role.kubernetes.io/control-plane, operator: In, values: ["true"] }
serviceAccountName: system-upgrade
upgrade:
image: rancher/rke2-upgrade
version: v1.29.4+rke2r1etcd ব্যাকআপ এবং
পুনরুদ্ধার করুনRKE2 স্বয়ংক্রিয়ভাবে নির্ধারিত etcd স্ন্যাপশট নিতে পারে। কন্ট্রোল-প্লেন নোডগুলিতে স্থানীয় ডিস্কের পরিবর্তে - একটি S3 বালতি বা একটি দূরবর্তী NFS মাউন্ট - ক্লাস্টারের বাইরে টেকসই স্টোরেজে লেখা হয়েছে তা নিশ্চিত করুন।
# /etc/rancher/rke2/config.yaml additions for automated snapshots
etcd-snapshot-schedule-cron: "0 */6 * * *" # every 6 hours
etcd-snapshot-retention: 10
etcd-snapshot-dir: /mnt/nfs/etcd-snapshots
# Manual snapshot
rke2 etcd-snapshot save --name pre-upgrade-$(date +%Y%m%d)
# Restore from snapshot (run on a single server node with cluster stopped)
rke2 server --cluster-reset --cluster-reset-restore-path=/path/to/snapshot.dbউপসংহার
RKE2 এর সাথেস্কেলিং অবকাঠামো একটি একক কনফিগারেশন পরিবর্তন নয় - এটি ইন্টারলকিং ক্ষমতাগুলির একটি সিস্টেম যা অবশ্যই একসাথে ডিজাইন এবং পরিচালনা করতে হবে। অনুভূমিক পড অটোস্কেলিং কাজের চাপ স্তরে স্বল্পকালীন ট্র্যাফিক বিস্ফোরণ পরিচালনা করে। উল্লম্ব পড অটোস্কেলিং সময়ের সাথে সাথে সম্পদের অনুরোধকে সৎ রাখে। ক্লাস্টার অটোস্ক্যালার নিশ্চিত করে যে অন্তর্নিহিত নোডের ক্ষমতা আপনার পড অটোস্ক্যালারের সামগ্রিক চাহিদা ট্র্যাক করে। নোড পুল এবং টপোলজি সীমাবদ্ধতাগুলি সঠিক হার্ডওয়্যারের উপর কাজের বোঝা নিশ্চিত করে। রিসোর্স কোটা এবং সীমা রেঞ্জ ভাড়াটেদের একে অপরের থেকে রক্ষা করে। PodDisruptionবাজেট এবং টপোলজি স্প্রেড সীমাবদ্ধতা সহজলভ্যতা শক্ত করে। এবং Grafana-এর সাথে Prometheus আপনার দলকে বিভ্রাট হওয়ার আগে অবক্ষয় শনাক্ত করার দৃশ্যমানতা দেয়।
RKE2 সঠিকভাবে উৎপাদনে তার স্থান অর্জন করে কারণ এটি এই স্ট্যাকের একটি উল্লেখযোগ্য অংশকে প্রি-কঠিন এবং প্রাক-সমন্বিত করে। আপনার দায়িত্ব হ'ল নবগুলি বোঝা, সেগুলিকে আপনার কাজের চাপের বৈশিষ্ট্যগুলির সাথে সুর করা এবং অপারেশনাল শৃঙ্খলা তৈরি করা — রানবুক, সতর্কতা রাউটিং, আপগ্রেড ক্যাডেন্স, ব্যাকআপ বৈধতা — যা একটি ভাল-কনফিগার করা ক্লাস্টারকে সত্যিকারের নির্ভরযোগ্য প্ল্যাটফর্মে পরিণত করে।