1. 程式人生 > 資訊 >VR 音遊《Synth Riders》宣佈將登陸 PS VR:7 月 27 日釋出

VR 音遊《Synth Riders》宣佈將登陸 PS VR:7 月 27 日釋出

目錄

結構

master:k8s主機器(也可以多個master)
node:k8s叢集機器

master控制node-->service(服務)-->deployment(控制器)-->pod-->docker-->部署應用

部署專案步驟

1.專案本身打包成jar或者war包,可以通過工具
2.製作專案映象(寫dockerfile檔案)
3.用k8s部署映象(命令方式或者yaml檔案方式)
4.對外暴露服務(3中方式,線上用ingress方式)



製作映象:docker build -t 映象名字 -f dockerfile路徑 .
生成yaml檔案:kubectl create deployment 控制器取名 --image=映象名 --dry-run -o yaml>./檔名.yaml
修改yaml檔案拉取本地映象:imagePullPolicy: Never
應用yaml檔案:kubectl apply -f 部署檔案.yaml
檢視是否啟動:kubectl get pods
暴露埠(給外部訪問):kubectl expose deployment nginx --port=80 --type=NodePort

運維工具

運維工具:
	Ansible
	Docker
		docker compose ---面向一臺
		docker swarm   ---面向docker叢集
		docker machine ---加入docker swarm的成員
	DevOps

部署k8s準備工作

# 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld

# 關閉selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 臨時

# 關閉swap(k8s禁止虛擬記憶體,提高效能)
swapoff -a # 臨時
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久

# 在master新增hosts
cat >> /etc/hosts << EOF
192.168.1.1 k8smaster
192.168.1.2 k8snode
EOF

# 設定網橋引數
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 時間同步,多臺伺服器時間同步
yum install ntpdate -y
ntpdate time.windows.com

Kubelet、Kubeadm、Kubectl

安裝Kubelet、Kubeadm、Kubectl
Kubelet:執行在cluster所有節點上,負責啟動POD和容器
Kubeadm:用於初始化cluster
Kubectl:Kubectl是Kubenetes命令列工具,通過Kubectl可以部署和管理應用,檢視各種資源,建立,刪除和更新組建

命令

kubectl get nodes                          # 查詢有哪些節點
kubectl get pods -n kube-system            # 列出pods下的資源
kubectl get namespace # 名稱空間  簡寫:kubectl get ns


kubectl get deployment										 # 查控制器
kubectl get pod														 # 查pod
docker images															 # 查映象
docker ps																	 # 查容器
kubectl get service												 # 查叢集服務
kubectl describe pods pod名稱               # 檢視pod詳情事件
kubectl logs -f pod名稱                     # 不斷輸出日誌
kubectl apply -f 配置檔名.yaml             # 應用配置檔案

建立控制器deployment

# 拉取映象建立容器並啟動,名為nginx
kubectl create deployment nginx --image=nginx

暴露埠

# 暴露nginx埠,給外部訪問
kubectl expose deployment nginx --port=80 --type=NodePort

k8s叢集中部署nginx

# 拉取映象建立容器並啟動,名為nginx
kubectl create deployment nginx --image=nginx
# 暴露nginx埠,給外部訪問
kubectl expose deployment nginx --port=80 --type=NodePort

k8s叢集部署微服務

1.專案打包(jar,war)-->採用工具打包,maven,jenkins
2.製作Dockerfile檔案,生成映象
3.kubectl create deployment 名字 --image=你的映象名字
4.你的springboot就部署好了,是以docker容器的方式執行在pod裡面

通過dockerfile構建映象

-f :指定要使用的Dockerfile路徑;
-t :映象的名字以及標籤
. :構建映象在當前目錄
docker build -t 映象名字 -f dockerfile路徑 .

執行映象

docker run -d 映象id

空執行測試

# 生成yaml拷貝出來改改
kubectl create deployment 控制器取名 --image=映象名 --dry-run -o yaml>./deploy.yaml

eg:
kubectl create deployment nginx3 --image=nginx --dry-run -o yaml > ./deploy.yaml



deploy.yaml內容:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx3
  name: nginx3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx3
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx3
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

k8s拉取本地映象引數配置

 containers:
      - name: myweb
        image: myweb-image
        imagePullPolicy: Never

命令部署

kubectl create deployment 控制器取名 --image=映象名

yaml檔案方式部署

部署檔案.yaml:資源清單

kubectl apply -f 部署檔案.yaml
等價於
kubectl create deployment 控制器取名 --image=映象名

暴露應用的三種方式NodePort、LoadBalancer 和 Ingress

# 暴露nginx埠,給外部訪問
kubectl expose deployment nginx --port=80 --type=NodePort

NodePort方式

NodePort服務是讓外部請求直接訪問服務的最原始方式,NodePort是在所有的節點上開放指定的埠,所有傳送到這個埠的請求都會直接轉發到服務中的pod裡;

這種方式不足:
1.一個埠只提供一個服務使用
2.只能使用30000-32767之間的埠
3.如果節點/虛擬機器的IP地址傳送變化,需要人工處理;
所以在生產環境,不推薦這種方式釋出服務

web瀏覽器訪問:

比如一個web應用需要被其他使用者訪問,那麼需要配置type=NodePort,而且怕誒之nodePort=30001,那麼其他機器就可以通過柳萋萋訪問:scheme://node:30001訪問到該服務。

NodePort 服務的 YAML 檔案類似如下:

apiVersion: v1
kind: Service
metadata:  
name: my-nodeport-service
selector:    
app: my-app
spec:
type: NodePort   # type配置
ports:  
- name: http
port: 80        # 叢集各個內部訪問埠
targetPort: 80	# 容器內部埠
nodePort: 30036  # 外部暴露埠,可以指定
protocol: TCP

命令

kubectl expose deployment mysql --port=3306 --target-port=3306 --type=NodePort  # 產生30000以上的隨機埠


kubectl create deployment mysql --image=mysql --dry-run -o yaml > ./deploy.yaml  # 測試啟動,產生yaml檔案

LoadBalancer方式

LoadBalancer可以暴露服務,這種方式需要向雲平臺申請負載均衡器
LoadBalancer 服務是暴露服務到 internet 的標準方式。在 GKE 上,這種方式會啟動一個 Network Load Balancer,它將給你一個單獨的 IP 地址,轉發所有流量到你的服務。

何時使用這種方式?

如果你想要直接暴露服務,這就是預設方式。所有通往你指定的埠的流量都會被轉發到對應的服務。它沒有過濾條件,沒有路由等。這意味著你幾乎可以傳送任何種類的流量到該服務,像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意種類

缺點:
每一個用 LoadBalancer 暴露的服務都會有它自己的 IP 地址,每個用到的 LoadBalancer 都需要付費,這將會產生成本。

Ingress方式

Ingress不是k8s內建的(安裝好k8s之後,並沒有安裝ingress),需要單獨安裝,而且有多種型別。我們一般選擇官方維護的ingress Nginx;
有別於以上所有例子,Ingress 事實上不是一種服務型別。相反,它處於多個服務的前端,扮演著“智慧路由”或者叢集入口的角色。
你可以用 Ingress 來做許多不同的事情,各種不同型別的 Ingress 控制器也有不同的能力。

GKE 上的預設 ingress 控制器是啟動一個 HTTP(S) Load Balancer。它允許你基於路徑或者子域名來路由流量到後端服務。例如,你可以將任何發往域名 foo.yourdomain.com 的流量轉到 foo 服務,將路徑 yourdomain.com/bar/path 的流量轉到 bar 服務。

使用ingress步驟:

1.部署ingress Nginx;
2.配置ingress niginx規則;

採用ingress暴露容器化應用(nginx):

1.部署一個容器化應用(pod),比如nginx程式
kubectl create deployment nginx --image=nginx

2.暴露該服務
kubectl expose deployment nginx --port=80 --type=NodePort

3.部署ingress nginx
https://github.com/kubernetes/ingress-nginx
ingress-nginx是使用nginx作為反向代理和負載均衡的k8s的ingress控制器;

# 下載
wget kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/baremetal/deploy.yaml

329行spec下加一行:hostNetwork:true
332行修改阿里雲image映象:
阿里雲映象首頁:http://dev.aliyun.com/去搜索ingress-nginx映象



4.應用檔案,自動部署ingress環境
kubectl apply -f deploy.yaml

5.檢視ingress的狀態
kubectl get pods -n ingress-nginx

6.應用配置ingress規則
kubectl apply -f ingress-nginx.yaml

如果報錯:刪除模組
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
再次應用配置ingress檔案

ingress-nginx.yaml配置檔案:

檢查一下:

kubectl get ingress  #簡寫kubectl get ins  # 查規則
kubectl get service -n ingress-nginx
kubectl get deploy -n ingress-nginx
kubectl get pods -n ingress-nginx

GKE 上用 L7 HTTP Load Balancer 生成的 Ingress 物件的 YAML 檔案類似如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
backend:
serviceName: other
servicePort: 8080
rules:
- host: foo.mydomain.com
http:
  paths:
  - backend:
      serviceName: foo
      servicePort: 8080
- host: mydomain.com
http:
  paths:
  - path: /bar/*
    backend:
      serviceName: bar
      servicePort: 8080

何時使用這種方式?

如果你想要使用同一個 IP 暴露多個服務,這些服務都是使用相同的七層協議(典型如 HTTP),那麼Ingress 就是最有用的。如果你使用本地的 GCP 整合,你只需要為一個負載均衡器付費,且由於 Ingress是“智慧”的,你還可以獲取各種開箱即用的特性(比如 SSL,認證,路由,等等)。

新增副本數,快速擴容

kind:deployment配置檔案

--replicas=4   # 副本數4

spec:
  replicas:4


kubectl apply -f 配置檔名.yaml  # 應用配置