本章節將介紹如何在kubernetes集群中部署一個nginx服務,並且能夠對其進行訪問。
4.1 Namespace
Namespace是kubernetes系統中的一種非常重要資源,它的主要作用是用來實現多套環境的資源隔離或者多租戶的資源隔離。
可以通過kubernetes的授權機制,將不同的namespace交給不同租戶進行管理,這樣就實現了多租戶的資源隔離。此時還能結合kubernetes的資源配額機制,限定不同租戶能占用的資源,例如CPU使用量、內存使用量等等,來實現租戶可用資源的管理。
kubernetes在集群啟動之后,會默認創建幾個namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 45h # 所有未指定Namespace的對象都會被分配在default命名空間
kube-node-lease Active 45h # 集群節點之間的心跳維護,v1.13開始引入
kube-public Active 45h # 此命名空間下的資源可以被所有人訪問(包括未認證用戶)
kube-system Active 45h # 所有由Kubernetes系統創建的資源都處於這個命名空間
下面來看namespace資源的具體操作:
查看
# 1 查看所有的ns 命令:kubectl get ns
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 45h
kube-node-lease Active 45h
kube-public Active 45h
kube-system Active 45h
# 2 查看指定的ns 命令:kubectl get ns ns名稱
[root@master ~]# kubectl get ns default
NAME STATUS AGE
default Active 45h
# 3 指定輸出格式 命令:kubectl get ns ns名稱 -o 格式參數
# kubernetes支持的格式有很多,比較常見的是wide、json、yaml
[root@master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2021-05-08T04:44:16Z"
name: default
resourceVersion: "151"
selfLink: /api/v1/namespaces/default
uid: 7405f73a-e486-43d4-9db6-145f1409f090
spec:
finalizers:
- kubernetes
status:
phase: Active
# 4 查看ns詳情 命令:kubectl describe ns ns名稱
[root@master ~]# kubectl describe ns default
Name: default
Labels: <none>
Annotations: <none>
Status: Active # Active 命名空間正在使用中 Terminating 正在刪除命名空間
# ResourceQuota 針對namespace做的資源限制
# LimitRange針對namespace中的每個組件做的資源限制
No resource quota.
No LimitRange resource.
創建
# 創建namespace
[root@master ~]# kubectl create ns dev
namespace/dev created
刪除
# 刪除namespace
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted
配置方式
首先准備一個yaml文件:ns-dev.yaml
apiVersion
然后就可以執行對應的創建和刪除命令了:
創建:kubectl create -f ns-dev.yaml
刪除:kubectl delete -f ns-dev.yaml
4.2 Pod
Pod是kubernetes集群進行管理的最小單元,程序要運行必須部署在容器中,而容器必須存在於Pod中。
Pod可以認為是容器的封裝,一個Pod中可以存在一個或者多個容器。
kubernetes在集群啟動之后,集群中的各個組件也都是以Pod方式運行的。可以通過下面命令查看:
[root@master ~]# kubectl get pod -n kube-system
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-68g6v 1/1 Running 0 2d1h
kube-system coredns-6955765f44-cs5r8 1/1 Running 0 2d1h
kube-system etcd-master 1/1 Running 0 2d1h
kube-system kube-apiserver-master 1/1 Running 0 2d1h
kube-system kube-controller-manager-master 1/1 Running 0 2d1h
kube-system kube-flannel-ds-amd64-47r25 1/1 Running 0 2d1h
kube-system kube-flannel-ds-amd64-ls5lh 1/1 Running 0 2d1h
kube-system kube-proxy-685tk 1/1 Running 0 2d1h
kube-system kube-proxy-87spt 1/1 Running 0 2d1h
kube-system kube-scheduler-master 1/1 Running 0 2d1h
創建並運行
kubernetes沒有提供單獨運行Pod的命令,都是通過Pod控制器來實現的
# 命令格式: kubectl run (pod控制器名稱) [參數]
# --image 指定Pod的鏡像
# --port 指定端口
# --namespace 指定namespace
[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace dev
deployment.apps/nginx created
查看pod信息
# 查看Pod基本信息
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 43s
# 查看Pod的詳細信息
[root@master ~]# kubectl describe pod nginx -n dev
Name: nginx
Namespace: dev
Priority: 0
Node: node1/192.168.5.4
Start Time: Wed, 08 May 2021 09:29:24 +0800
Labels: pod-template-hash=5ff7956ff6
run=nginx
Annotations: <none>
Status: Running
IP: 10.244.1.23
IPs:
IP: 10.244.1.23
Controlled By: ReplicaSet/nginx
Containers:
nginx:
Container ID: docker://4c62b8c0648d2512380f4ffa5da2c99d16e05634979973449c98e9b829f6253c
Image: nginx:latest
Image ID: docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Wed, 08 May 2021 09:30:01 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-hwvvw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-hwvvw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-hwvvw
Optional: false