K8S基本操作-04-namespace基本使用
列出 namespaces
kubectl get namespaces
列出某 namespaces 裏頭的 pods
例如我們要取得 research
namespaces 裏頭的 pod。
kubectl -n research get pods
算出某個 namespaces 裏頭的 pods 數量
kubectl -n research get pods --no-headers | wc -l
手動在某 namespaces 裏頭啟動 pod
kubectl -n finance run redis --image=redis
搜尋許多 namespaces 某個 pod 的名字
我們可以用 kubectl get pods --all-namespaces
列出所有的 pods。 用 grep 篩選 blue 這個 pod。
kubectl get pods --all-namespaces | grep blue
查詢同 namespaces 裏頭某個 pod 的 DNS name
例如,我們要查詢 marketing 這個 namespaces 裏頭某個 pod 開放的內部 cluster IP ,我們可以列出 service。
kubectl -n marketing get service
結果如下
controlplane ~ ➜ kubectl -n marketing get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
blue-service NodePort 10.43.235.8 <none> 8080:30082/TCP 16m
db-service NodePort 10.43.235.25 <none> 6379:30449/TCP 16m
我們可以在同一個 namespace 裏頭,可以用以下的 IP 與 URL 來存取 db-service。
db-service:6379
10.43.235.25:6379
我們接著用以下指令查看,這個 Service 連接到哪個 pod。
kubectl -n marketing describe service db-service
結果如下
controlplane ~ ➜ kubectl -n marketing describe service db-service
Name: db-service
Namespace: marketing
Labels: <none>
Annotations: <none>
Selector: name=redis
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.43.235.25
IPs: 10.43.235.25
Port: <unset> 6379/TCP
TargetPort: 6379/TCP
NodePort: <unset> 30449/TCP
Endpoints: 10.42.0.12:6379
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
我們注意到下方 Selector 指向 name=redis,這應該是個 redis 的 pod 。
Selector: name=redis
為了保險起見,檢查一下 pod 的 label 是否為 redis。
kubectl -n marketing describe pod redis-db
結果如下
controlplane ~ ➜ kubectl -n marketing describe pod redis-db
Name: redis-db
Namespace: marketing
Priority: 0
Service Account: default
Node: controlplane/192.12.75.6
Start Time: Sun, 19 Nov 2023 09:50:55 +0000
Labels: name=redis
Annotations: <none>
Status: Running
IP: 10.42.0.12
IPs:
IP: 10.42.0.12
Containers:
redis:
Container ID: containerd://727e0237514b426edb974d8ef86c58b92f3d18bf56d319aa51a1073fec21b44a
Image: redis:alpine
Image ID: docker.io/library/redis@sha256:6a7b3c6e3a6854424d96953172cac1ca97f0fc90094bcc479f3949e29bb053af
Port: 6379/TCP
Host Port: 0/TCP
State: Running
Started: Sun, 19 Nov 2023 09:51:02 +0000
Ready: True
Restart Count: 0
Environment:
REDIS_ROOT_PASSWORD: paswrd
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-2cjsf (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-2cjsf:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 27m default-scheduler Successfully assigned marketing/redis-db to controlplane
Normal Pulling 27m kubelet Pulling image "redis:alpine"
Normal Pulled 27m kubelet Successfully pulled image "redis:alpine" in 4.147848894s (4.147858855s including waiting)
Normal Created 27m kubelet Created container redis
Normal Started 27m kubelet Started container redis
話說,如果要存取 dev
namespace 的 db-service
服務可以採用以下的 URL。
db-service.dev.svc.cluster.local
那個 local 也可以改成某主機的 URL。