k8s通過資源配置執行容器
阿新 • • 發佈:2020-12-01
1、概述
我們知道通過run
命令啟動容器非常麻煩,Docker 提供了 Compose 為我們解決了這個問題。那 Kubernetes 是如何解決這個問題的呢?其實很簡單,使用kubectl create
命令就可以做到和 Compose 一樣的效果了,該命令可以通過配置檔案快速建立一個叢集資源物件。
2、建立 YAML 配置檔案
以部署 Nginx 為例
a.部署 Deployment
建立一個名為nginx-deployment.yml
的配置檔案
# API 版本號 apiVersion: extensions/v1beta1 # 型別,如:Pod/ReplicationController/Deployment/Service/Ingress kind: Deployment # 元資料 metadata: # Kind 的名稱 name: nginx-app spec: # 部署的例項數量 replicas: 2 template: metadata: labels: # 容器標籤的名字,釋出 Service 時,selector 需要和這裡對應 name: nginx spec: # 配置容器,陣列型別,說明可以配置多個容器 containers: # 容器名稱 - name: nginx # 容器映象 image: nginx # 暴露埠 ports: # Pod 埠 - containerPort: 80
# 部署
kubectl create -f nginx-deployment.yml
# 刪除
kubectl delete -f nginx-deployment.yml
b.釋出 Service
建立一個名為nginx-service.yml
的配置檔案
# API 版本號 apiVersion: v1 # 型別,如:Pod/ReplicationController/Deployment/Service/Ingress kind: Service # 元資料 metadata: # Kind 的名稱 name: nginx-http spec: # 暴露埠 ports: ## Service 暴露的埠 - port: 80 ## Pod 上的埠,這裡是將 Service 暴露的埠轉發到 Pod 埠上 targetPort: 80 # 型別 type: LoadBalancer # 標籤選擇器 selector: # 需要和上面部署的 Deployment 標籤名對應 name: nginx
# 部署
kubectl create -f nginx-service.yml
# 刪除
kubectl delete -f nginx-service.yml
3、驗證是否生效
a.檢視 Pod 列表
kubectl get pods # 輸出如下 NAME READY STATUS RESTARTS AGE nginx-app-64bb598779-2pplx 1/1 Running 0 25m nginx-app-64bb598779-824lc 1/1 Running 0 25m
b.檢視 Deployment 列表
kubectl get deployment
# 輸出如下
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 2/2 2 2 25m
c.檢視 Service 列表
kubectl get service
# 輸出如下
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20h
nginx-http LoadBalancer 10.98.49.142 <pending> 80:31631/TCP 14m
d.檢視 Service 詳情
kubectl describe service nginx-app
# 輸出如下
Name: nginx-http
Namespace: default
Labels: <none>
Annotations: <none>
Selector: name=nginx
Type: LoadBalancer
IP: 10.98.49.142
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 31631/TCP
Endpoints: 10.244.141.205:80,10.244.2.4:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
e.通過瀏覽器訪問
通過瀏覽器訪問 http://192.168.141.150:31631/ ,出現 Nginx 歡迎頁即表示成功
4/整合環境部署
也可以不區分配置檔案,一次性部署 Deployment 和 Service,建立一個名為nginx.yml
的配置檔案,配置內容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-app
spec:
replicas: 2
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-http
spec:
ports:
- port: 80
targetPort: 80
# 可以指定 NodePort 埠,預設範圍是:30000-32767
# nodePort: 30080
type: LoadBalancer
selector:
name: nginx
# 部署
kubectl create -f nginx.yml
# 刪除
kubectl delete -f nginx.yml
5、附:修改預設的埠範圍
Kubernetes 服務的 NodePort 預設埠範圍是 30000-32767,在某些場合下,這個限制不太適用,我們可以自定義它的埠範圍,操作步驟如下:
編輯vi /etc/kubernetes/manifests/kube-apiserver.yaml
配置檔案,增加配置--service-node-port-range=2-65535
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
component: kube-apiserver
tier: control-plane
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
# 在這裡增加配置即可
- --service-node-port-range=2-65535
- --advertise-address=192.168.141.150
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --enable-admission-plugins=NodeRestriction
- --enable-bootstrap-token-auth=true
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
// 以下配置省略...
使用docker ps
命令找到kube-apiserver
容器,再使用docker restart <ApiServer 容器 ID>
即可生效。
轉自:有夢想的鹹魚