1 - اجرای kubelet در حالت مستقل
این آموزش به شما نشان میدهد که چگونه یک نمونه مستقل از kubelet را اجرا کنید
شما ممکن است انگیزههای مختلفی برای اجرای یک kubelet مستقل داشته باشید این آموزش با هدف آشنایی شما با کوبرنتیز تهیه شده است، حتی اگر تجربه زیادی با آن نداشته باشید. میتوانید این آموزش را دنبال کنید و در مورد راهاندازی گره، پادهای پایه (استاتیک) و نحوه مدیریت کانتینرها توسط کوبرنتیزاطلاعات کسب کنید
پس از دنبال کردن این آموزش، میتوانید از خوشه ای که دارای control plane برای مدیریت پادها و گرهها و انواع دیگر اشیاء است، استفاده کنید. به عنوان مثال، Hello, minikube
همچنین میتوانید kubelet را در حالت مستقل اجرا کنید تا برای موارد استفاده در محیط عملیاتی مناسب باشد، مانند اجرای control plane برای یک خوشه (cluster) با قابلیت دسترسی بالا و استقرار انعطافپذیر. این آموزش جزئیات مورد نیاز برای اجرای یک control plane انعطافپذیر را پوشش نمیدهد
Objectives
cri-o
وkubelet
را روی یک سیستم لینوکس نصب کنید و آنها را به عنوان سرویسهایsystemd
اجرا کنید.- یک پاد (Pod) با اجرای
nginx
راهاندازی کنید که به درخواستهای روی پورت TCP 80 روی نشانی IP پاد گوش دهد. - یاد بگیرید که چگونه اجزای مختلف راهحل با یکدیگر تعامل دارند.
Caution:
پیکربندی kubelet که برای این آموزش استفاده شده است، از نظر طراحی ناامن است و نباید در محیط عملیاتی استفاده شودBefore you begin
- دسترسی ادمین (
root
) به یک سیستم لینوکس که ازsystemd
وiptables
(یا nftables با شبیهسازیiptables
) استفاده میکند - دسترسی به اینترنت برای دانلود اجزای مورد نیاز برای آموزش، مانند:
دسترسی به اینترنت برای دانلود اجزای مورد نیاز برای آموزش، مانند:
- یک مجری کانتینرکه کوبرنتیز (CRI) را پیادهسازی میکند
- Network plugins (these are often known as Container Networking Interface (CNI))
- Required CLI tools:
curl
,tar
,jq
.
سیستم را آماده کنید
پیکربندی Swap
به طور پیشفرض، اگر حافظه swap روی یک گره شناسایی شود، kubelet شروع به کار نمیکند. این بدان معناست که swap باید غیرفعال شود یا توسط kubelet تحمل شود.
Note:
اگر kubelet را طوری پیکربندی کنید که swap را تحمل کند، kubelet همچنان Podها (و کانتینرهای موجود در آن Podها) را طوری پیکربندی میکند که از فضای swap استفاده نکنند. برای اینکه بفهمید Podها چگونه میتوانند از swap موجود استفاده کنند، میتوانید درباره مدیریت حافظه swap در گرههای لینوکس بیشتر بخوانیداگر حافظه swap را فعال کردهاید، آن را غیرفعال کنید یا عبارت failSwapOn: false
را به پرونده پیکربندی kubelet اضافه کنید
برای بررسی فعال بودن swap:
sudo swapon --show
اگر هیچ خروجی از دستور وجود نداشته باشد، حافظه swap از قبل غیرفعال شده است
برای غیرفعال کردن موقت swap:
sudo swapoff -a
برای اینکه این تغییر در طول راهاندازیهای مجدد پایدار بماند:
مطمئن شوید که swap بسته به نحوه پیکربندی آن در سیستم شما، در /etc/fstab
یا systemd.swap
غیرفعال باشد
فعال کردن ارسال بسته IPv4
برای بررسی اینکه آیا ارسال بسته IPv4 فعال است:
cat /proc/sys/net/ipv4/ip_forward
اگر خروجی «۱» باشد، از قبل فعال شده است. اگر خروجی «۰» باشد، مراحل بعدی را دنبال کنید
برای فعال کردن ارسال بسته IPv4، یک پرونده پیکربندی ایجاد کنید که پارامتر net.ipv4.ip_forward را روی 1
تنظیم کند:
sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
EOF
اعمال تغییرات در سیستم:
sudo sysctl --system
خروجی مشابه این است:
...
* Applying /etc/sysctl.d/k8s.conf ...
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf ...
دانلود، نصب و پیکربندی مولفه ها
یک مجری کانتینر اجرا نصب کنید
آخرین نسخههای موجود از بستههای مورد نیاز را دانلود کنید (توصیه میشود).
این آموزش نصب CRI-O container runtime (لینک خارجی) را پیشنهاد میکند
بسته به توزیع لینوکس خاص شما، چندین [روش] برای نصب [https://github.com/cri o/cri o/blob/main/install.md] کانتینر CRI O در زمان اجرا وجود دارد. اگرچه CRI O استفاده از بستههای deb
یا rpm
را توصیه میکند، اما این آموزش از اسکریپت _static binary bundle_
پروژه CRI O Packaging
(https://github.com/crio/packaging/blob/main/README.md) استفاده میکند، که هم برای سادهسازی فرآیند کلی و هم برای عدم وابستگی به توزیع مورد نظر است
این اسکریپت نرمافزارهای مورد نیاز اضافی، مانند cni-plugins
برای شبکهسازی کانتینر، و crun
و runc
برای اجرای کانتینرها را نصب و پیکربندی میکند
این اسکریپت به طور خودکار معماری پردازنده سیستم شما (amd64
یا arm64
) را تشخیص داده و آخرین نسخههای بستههای نرمافزاری را انتخاب و نصب میکند
CRI-O تنظیم
از صفحه نسخهها (پیوند خارجی) دیدن کنید
اسکریپت بسته دودویی استاتیک را دانلود کنید:
curl https://raw.githubusercontent.com/cri-o/packaging/main/get > crio-install
اسکریپت نصب را اجرا کنید:
sudo bash crio-install
فعال کردن و شروع سرویس crio
:
sudo systemctl daemon-reload
sudo systemctl enable --now crio.service
تست سریع:
sudo systemctl is-active crio.service
خروجی مشابه این است:
active
بررسی دقیق سرویس:
sudo journalctl -f -u crio.service
نصب افزونه های شبکه
نصبکنندهی cri-o
بستهی cni-plugins
را نصب و پیکربندی میکند. میتوانید با اجرای دستور زیر، نصب را تأیید کنید:
/opt/cni/bin/bridge --version
خروجی مشابه این است:
CNI bridge plugin v1.5.1
CNI protocol versions supported: 0.1.0, 0.2.0, 0.3.0, 0.3.1, 0.4.0, 1.0.0
برای بررسی پیکربندی پیشفرض:
cat /etc/cni/net.d/11-crio-ipv4-bridge.conflist
خروجی مشابه این است:
{
"cniVersion": "1.0.0",
"name": "crio",
"plugins": [
{
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"hairpinMode": true,
"ipam": {
"type": "host-local",
"routes": [
{ "dst": "0.0.0.0/0" }
],
"ranges": [
[{ "subnet": "10.85.0.0/16" }]
]
}
}
]
}
Note:
مطمئن شوید که محدوده پیشفرض «زیرشبکه» (۱۰.۸۵.۰.۰/۱۶) با هیچ یک از شبکههای فعال شما همپوشانی ندارد. در صورت وجود همپوشانی، میتوانید پرونده را ویرایش کرده و آن را مطابق با آن تغییر دهید. پس از تغییر، سرویس را مجدداً راهاندازی کنیددانلود و نصب kubelet
آخرین نسخه پایدار آخرین نسخه از kubelet را دریافت کنید
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubelet"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubelet"
پیکربندی:
sudo mkdir -p /etc/kubernetes/manifests
sudo tee /etc/kubernetes/kubelet.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
authentication:
webhook:
enabled: false # Do NOT use in production clusters!
authorization:
mode: AlwaysAllow # Do NOT use in production clusters!
enableServer: false
logging:
format: text
address: 127.0.0.1 # Restrict access to localhost
readOnlyPort: 10255 # Do NOT use in production clusters!
staticPodPath: /etc/kubernetes/manifests
containerRuntimeEndpoint: unix:///var/run/crio/crio.sock
EOF
Note:
از آنجا که شما در حال راهاندازی یک خوشه (cluster) عملیاتی نیستید، از HTTP ساده (readOnlyPort: 10255
) برای کوئریهای احراز هویت نشده به API kubelet استفاده میکنید
برای اهداف این آموزش، وبهوک احراز هویت غیرفعال است و حالت مجوز روی «همیشه مجاز» تنظیم شده است. میتوانید برای پیکربندی صحیح kubelet در حالت مستقل در محیط خود، اطلاعات بیشتری در مورد حالتهای مجوز و احراز هویت وبهوک کسب کنید.
برای آشنایی با پورتهایی که اجزای کوبرنتیز از آنها استفاده میکنند، به درگاه ها و پروتکل ها مراجعه کنید.
نصب:
chmod +x kubelet
sudo cp kubelet /usr/bin/
یک پرونده واحد سرویس systemd
ایجاد کنید:
sudo tee /etc/systemd/system/kubelet.service <<EOF
[Unit]
Description=Kubelet
[Service]
ExecStart=/usr/bin/kubelet \
--config=/etc/kubernetes/kubelet.yaml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
پارامتر خط فرمان --kubeconfig
عمداً در پرونده پیکربندی سرویس حذف شده است. این پارامتر مسیر پرونده [kubeconfig](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
را تعیین میکند که نحوه اتصال به سرور API را مشخص میکند و حالت سرور API را فعال میکند. حذف آن، حالت مستقل را فعال میکند.
سرویس kubelet
را فعال و شروع کنید:
sudo systemctl daemon-reload
sudo systemctl enable --now kubelet.service
آزمایش سریع:
sudo systemctl is-active kubelet.service
خروجی مشابه زیر است:
active
بررسی دقیق سرویس:
sudo journalctl -u kubelet.service
نقطه پایانی API /healthz
مربوط به kubelet را بررسی کنید:
curl http://localhost:10255/healthz?verbose
خروجی مشابه زیر است:
[+]ping ok
[+]log ok
[+]syncloop ok
healthz check passed
از نقطه پایانی API /pods
مربوط به kubelet کوئری بگیرید:
curl http://localhost:10255/pods | jq '.'
خروجی مشابه زیر است:
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {},
"items": null
}
یک پاد را در kubelet اجرا کنید
در حالت مستقل، میتوانید پادها را با استفاده از تنظیمات پاد اجرا کنید. تنظیمات میتوانند یا در سیستم پرونده محلی باشند یا از طریق HTTP از یک منبع پیکربندی دریافت شوند.
ایجاد یک تنظیمات برای یک Pod:
cat <<EOF > static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
EOF
پرونده تنظیمات static-web.yaml
را در پوشه /etc/kubernetes/manifests
رونوشت کنید.
sudo cp static-web.yaml /etc/kubernetes/manifests/
اطلاعاتی در مورد کوبلت و پاد پیدا کنید
افزونه شبکه Pod یک پل شبکه (cni0
) و یک جفت رابط veth
برای هر Pod ایجاد میکند (یکی از این جفتها درون Pod تازه ساخته شده و دیگری در سطح میزبان است).
نقطه پایانی API مربوط به kubelet را در نشانی http://localhost:10255/pods
جستجو کنید:
curl http://localhost:10255/pods | jq '.'
برای به دست آوردن نشانی IP مربوط به پاد static-web
:
curl http://localhost:10255/pods | jq '.items[].status.podIP'
خروجی مشابه زیر است:
"10.85.0.4"
به پاد سرور nginx
روی http://<IP>:<Port>
(پورت پیشفرض ۸۰ است) متصل شوید، در این مورد:
curl http://10.85.0.4
خروجی مشابه زیر است:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
جزئیات بیشتر را کجا جستجو کنیم
اگر نیاز به تشخیص مشکلی در اجرای این آموزش دارید، میتوانید برای نظارت و عیبیابی به پوشههای زیر مراجعه کنید:
/var/lib/cni
/var/lib/containers
/var/lib/kubelet
/var/log/containers
/var/log/pods
پاک کردن
kubelet
sudo systemctl disable --now kubelet.service
sudo systemctl daemon-reload
sudo rm /etc/systemd/system/kubelet.service
sudo rm /usr/bin/kubelet
sudo rm -rf /etc/kubernetes
sudo rm -rf /var/lib/kubelet
sudo rm -rf /var/log/containers
sudo rm -rf /var/log/pods
مجری کانتینر
sudo systemctl disable --now crio.service
sudo systemctl daemon-reload
sudo rm -rf /usr/local/bin
sudo rm -rf /usr/local/lib
sudo rm -rf /usr/local/share
sudo rm -rf /usr/libexec/crio
sudo rm -rf /etc/crio
sudo rm -rf /etc/containers
افزونه های شبکه
sudo rm -rf /opt/cni
sudo rm -rf /etc/cni
sudo rm -rf /var/lib/cni
نتیجهگیری
این صفحه جنبههای اساسی استقرار یک kubelet در حالت مستقل را پوشش داد. اکنون آماده استقرار پادها و آزمایش قابلیتهای اضافی هستید.
توجه داشته باشید که در حالت مستقل، kubelet از دریافت پیکربندیهای پاد از control plane پشتیبانی نمیکند (زیرا هیچ اتصالی به control plane وجود ندارد).
همچنین نمیتوانید از ConfigMap یا Secret برای پیکربندی کانتینرها در یک پاد استاتیک استفاده کنید.
What's next
- برای یادگیری نحوهی اجرای کوبرنتیز با یک control plane، Hello, minikube را دنبال کنید. ابزار minikube به شما کمک میکند تا یک خوشه ی تمرینی روی رایانهی خود راهاندازی کنید.
- درباره افزونههای شبکه بیشتر بدانید
- درباره مجری های کانتینر بیشتر بدانید
- درباره kubelet بیشتر بدانید
- درباره پاد های استاتیک بیشتر بدانید
2 - راهنمای فضاهای نام
کوبرنتیز فضاهای نام به پروژهها، تیمها یا مشتریان مختلف کمک کنید تا خوشه (cluster) کوبرنتیز را به اشتراک بگذارند.
این کار را با ارائه موارد زیر انجام میدهد:
- یک محدوده برای نامها.
- (cluster)سازوکاری برای ضمیمه کردن مجوز و سیاست به یک زیربخش از خوشه.
استفاده از چندین فضای نام اختیاری است.
این مثال نحوه استفاده از فضاهای نام کوبرنتیز برای تقسیمبندی خوشه (cluster) شما را نشان میدهد.
Before you begin
شما باید یک خوشه(Cluster) کوبرنتیز داشته باشید و ابزار خطِّ فرمان kubectl
نیز برای برقراری ارتباط با خوشه شما پیکربندی شده باشد. توصیه میشود این آموزش را روی خوشهای با دستکم دو گره(Node) که بهعنوان میزبانهای control plane عمل نمیکنند اجرا کنید.
اگر هنوز خوشه ندارید، میتوانید با استفاده از
minikube
یکی بسازید یا از یکی از محیطهای آزمایشی کوبرنتیز زیر بهره ببرید:
To check the version, enter kubectl version
.
پیشنیازها
این مثال موارد زیر را فرض میکند:
- شما یک خوشه کوبرنتیز موجود دارید.
- شما درک اولیهای از کوبرنتیز پادهای، سرویس ها، و استقرارها دارید.
آشنایی با فضای نام پیشفرض
به طور پیشفرض، یک خوشه (cluster) کوبرنتیز هنگام آمادهسازی خوشه (cluster)، یک فضای نام پیشفرض را نمونهسازی میکند تا مجموعه پیشفرض پادها، سرویسهاواستقرارها مورد استفاده توسط خوشه را در خود جای دهد.
با فرض اینکه یک خوشه (cluster) جدید دارید، میتوانید با انجام موارد زیر، فضاهای نام موجود را بررسی کنید:
kubectl get namespaces
NAME STATUS AGE
default Active 13m
ایجاد فضاهای نام جدید
برای این تمرین، دو فضای نام کوبرنتیز اضافی برای نگهداری محتوای خودایجاد خواهیم کرد.
بیایید سناریویی را تصور کنیم که در آن یک سازمان از یک خوشه (cluster) مشترک کوبرنتیز برای موارد استفاده توسعه و تولید استفاده میکند.
تیم توسعه میخواهد فضایی را در خوشه (cluster) حفظ کند که در آن بتوانند فهرست پادها، سرویسهاواستقرارهایی را که برای ساخت و اجرای برنامه خود استفاده میکنند، مشاهده کنند. در این فضا، منابع کوبرنتیز میآیند و میروند و محدودیتهای مربوط به اینکه چه کسی میتواند یا نمیتواند منابع را تغییر دهد، کاهش مییابد تا توسعه چابک امکانپذیر شود.
تیم عملیات مایل است فضایی را در خوشه (cluster) حفظ کند که در آن بتواند رویههای سختگیرانهای را در مورد اینکه چه کسی میتواند یا نمیتواند مجموعه پادها، سرویسها و استقرارهایی را که وبگاه عملیاتی را اداره میکنند، دستکاری کند، اعمال کند.
یکی از الگوهایی که این سازمان میتواند دنبال کند، تقسیمبندی خوشه (cluster) کوبرنتیز به دو فضای نام است: «توسعه» و «تولید».
بیایید دو فضای نام جدید برای نگهداری کارمان ایجاد کنیم.
از پرونده namespace-dev.yaml
که یک فضای نام development
را توصیف میکند، استفاده کنید:
apiVersion: v1
kind: Namespace
metadata:
name: development
labels:
name: development
فضای نام «توسعه» را با استفاده از kubectl ایجاد کنید.
kubectl create -f https://k8s.io/examples/admin/namespace-dev.yaml
محتویات زیر را در پرونده namespace-prod.yaml
که یک فضای نام production
را توصیف میکند، ذخیره کنید:
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
name: production
و سپس بیایید فضای نام production
را با استفاده از kubectl ایجاد کنیم.
kubectl create -f https://k8s.io/examples/admin/namespace-prod.yaml
برای اطمینان از درست بودن همه چیز، بیایید تمام فضاهای نام موجود در خوشه (cluster) خود را فهرست کنیم.
kubectl get namespaces --show-labels
NAME STATUS AGE LABELS
default Active 32m <none>
development Active 29s name=development
production Active 23s name=production
ایجاد پادها در هر فضای نام
فضای نام کوبرنتیز، محدودهی پادها، سرویسهاواستقرارها را در خوشه (cluster) فراهم میکند.
کاربرانی که با یک فضای نام تعامل دارند، محتوای فضای نام دیگر را نمیبینند.
برای نشان دادن این موضوع، بیایید یک استقرار و پادهای ساده را در فضای نام development
اجرا کنیم.
ابتدا بررسی میکنیم که محتوا فعلی چیست:
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://130.211.122.180
name: lithe-cocoa-92103_kubernetes
contexts:
- context:
cluster: lithe-cocoa-92103_kubernetes
user: lithe-cocoa-92103_kubernetes
name: lithe-cocoa-92103_kubernetes
current-context: lithe-cocoa-92103_kubernetes
kind: Config
preferences: {}
users:
- name: lithe-cocoa-92103_kubernetes
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
- name: lithe-cocoa-92103_kubernetes-basic-auth
user:
password: h5M0FtUUIflBSdI7
username: admin
kubectl config current-context
lithe-cocoa-92103_kubernetes
مرحله بعدی تعریف یک context برای کلاینت kubectl است تا در هر فضای نام کار کند. مقدار فیلدهای "cluster" و "user" از context فعلی رونوشت میشود.
kubectl config set-context dev --namespace=development \
--cluster=lithe-cocoa-92103_kubernetes \
--user=lithe-cocoa-92103_kubernetes
kubectl config set-context prod --namespace=production \
--cluster=lithe-cocoa-92103_kubernetes \
--user=lithe-cocoa-92103_kubernetes
بهطور پیشفرض، دستورات بالا دو context را اضافه میکنند که در پرونده «.kube/config» ذخیره میشوند. اکنون میتوانید contextها را مشاهده کنید و بسته به فضای نامی که میخواهید با آن کار کنید، متناوب با دو context درخواستی جدید جایگزین کنید.
برای مشاهدهی contextهای جدید:
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://130.211.122.180
name: lithe-cocoa-92103_kubernetes
contexts:
- context:
cluster: lithe-cocoa-92103_kubernetes
user: lithe-cocoa-92103_kubernetes
name: lithe-cocoa-92103_kubernetes
- context:
cluster: lithe-cocoa-92103_kubernetes
namespace: development
user: lithe-cocoa-92103_kubernetes
name: dev
- context:
cluster: lithe-cocoa-92103_kubernetes
namespace: production
user: lithe-cocoa-92103_kubernetes
name: prod
current-context: lithe-cocoa-92103_kubernetes
kind: Config
preferences: {}
users:
- name: lithe-cocoa-92103_kubernetes
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
- name: lithe-cocoa-92103_kubernetes-basic-auth
user:
password: h5M0FtUUIflBSdI7
username: admin
بیایید به فضای نام «development» تغییر دهیم.
kubectl config use-context dev
شما میتوانید با انجام موارد زیر، context فعلی خود را تأیید کنید:
kubectl config current-context
dev
در این مرحله، تمام درخواستهایی که از خط فرمان به خوشه (cluster) کوبرنتیز ارسال میکنیم، در فضای نام development
قرار میگیرند.
بیایید چند محتوا ایجاد کنیم.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: snowflake
name: snowflake
spec:
replicas: 2
selector:
matchLabels:
app: snowflake
template:
metadata:
labels:
app: snowflake
spec:
containers:
- image: registry.k8s.io/serve_hostname
imagePullPolicy: Always
name: snowflake
تغییرات را برای ایجاد یک استقرار اعمال کنید
kubectl apply -f https://k8s.io/examples/admin/snowflake-deployment.yaml
ما یک استقرار با اندازه رونوشت ۲ عدد پاد ایجاد کردهایم که پادی به نام snowflake
را با یک کانتینر پایه که نام میزبان را ارائه میدهد، اجرا میکند.
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
snowflake 2/2 2 2 2m
kubectl get pods -l app=snowflake
NAME READY STATUS RESTARTS AGE
snowflake-3968820950-9dgr8 1/1 Running 0 2m
snowflake-3968820950-vgc4n 1/1 Running 0 2m
و این عالی است، توسعهدهندگان میتوانند هر کاری که میخواهند انجام دهند و لازم نیست نگران تأثیرگذاری بر محتوا در فضای نام «تولید» باشند.
بیایید به فضای نام production
برویم و نشان دهیم که چگونه منابع موجود در یک فضای نام از فضای نام دیگر پنهان میشوند.
kubectl config use-context prod
فضای نام production
باید خالی باشد و دستورات زیر نباید چیزی را برگردانند.
kubectl get deployment
kubectl get pods
بخش تولید دوست دارد گاوها را اداره کند، پس بیایید چند گاوداری ایجاد کنیم.
kubectl create deployment cattle --image=registry.k8s.io/serve_hostname --replicas=5
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
cattle 5/5 5 5 10s
kubectl get pods -l app=cattle
NAME READY STATUS RESTARTS AGE
cattle-2263376956-41xy6 1/1 Running 0 34s
cattle-2263376956-kw466 1/1 Running 0 34s
cattle-2263376956-n4v97 1/1 Running 0 34s
cattle-2263376956-p5p3i 1/1 Running 0 34s
cattle-2263376956-sxpth 1/1 Running 0 34s
در این مرحله، باید مشخص شده باشد که منابعی که کاربران در یک فضای نام ایجاد میکنند، از فضای نام دیگر پنهان هستند.
با تکامل پشتیبانی از سیاست در کوبرنتیز، این سناریو را گسترش خواهیم داد تا نشان دهیم چگونه میتوانید قوانین مجوز متفاوتی را برای هر فضای نام ارائه دهید.