在 Kubeadm 中使用 pod 安全策略
804
2022-05-29
@[TOC](文章目錄)
## 概述/理解
VirtualMachineInstanceReplicaSet(vmis)確保指定數量的 VirtualMachineInstance(vmi) 副本在任何時候都在運行。
我們可以這樣理解,vmis就是kubernetes(k8s)里面的控制器(DeployMent,ReplicaSet)管理我們pod的副本數,實現擴縮容、回滾等。也可以借助HorizontalPodAutoscaler(hpa)實現彈性伸縮。這里我們就說vmis控制器,在這里的vmis控制器,管理我們vmi虛擬機實例的副本數,也可以實現擴縮容,借助hpa實現彈性伸縮。所有我們的yaml文件寫法原理都類似。
## 使用場景
當需要許多相同的虛擬機,并且不關心在虛擬機終止后任何磁盤狀態時。
## 創建vmis
1. 編寫vmis的yaml文件
```bash
[root@master vm]# cat vmis.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstanceReplicaSet
metadata:
name: testreplicaset
spec:
replicas: 2
selector:
matchLabels:
myvmi: myvmi ?# 保持一致,選擇
template:
metadata:
labels:
myvmi: myvmi # 保持一致,匹配
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
resources:
requests:
memory: 1024M
volumes:
- name: containerdisk
containerDisk:
image: centos7
imagePullPolicy: IfNotPresent
```
2. 使用kubectl命令創建vmis
```bash
[root@master vm]# kubectl apply -f vmis.yaml
virtualmachineinstancereplicaset.kubevirt.io/testreplicaset created
```
3. 查看運行狀態
```bash
[root@master vm]# kubectl get vmis
NAME ? ? ? ? ? ? ? ? ?AGE ? PHASE ? ? ? ?IP ? ? ? ? ? ? NODENAME ? READY
testreplicaset6vm9s ? 42s ? Running ? ? ?10.244.0.139 ? master ? ? False
testreplicaset8dshm ? 22s ? Scheduling ? ? ? ? ? ? ? ? ? ? ? ? ? ? False
testreplicasetbqxnb ? 22s ? Scheduling ? ? ? ? ? ? ? ? ? ? ? ? ? ? False
[root@master vm]# kubectl get vmis
NAME ? ? ? ? ? ? ? ? ?AGE ? PHASE ? ? IP ? ? ? ? ? ? NODENAME ? READY
testreplicaset8dshm ? 46s ? Running ? 10.244.0.141 ? master ? ? False
testreplicasetbqxnb ? 46s ? Running ? 10.244.0.140 ? master ? ? False
[root@master vm]# kubectl get pod
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? STATUS ? ?RESTARTS ? AGE
virt-launcher-testreplicaset8dshm-nz7x2 ? 2/2 ? ? Running ? 0 ? ? ? ? ?69s
virt-launcher-testreplicasetbqxnb-ljp2f ? 2/2 ? ? Running ? 0 ? ? ? ? ?70s
```
4. describe 查看詳細信息
```bash
[root@master vm]# kubectl describe vmirs testreplicaset
Name: ? ? ? ? testreplicaset
Namespace: ? ?default
Labels: ? ? ?
Annotations: ?kubevirt.io/latest-observed-api-version: v1
kubevirt.io/storage-observed-api-version: v1alpha3
API Version: ?kubevirt.io/v1
Kind: ? ? ? ? VirtualMachineInstanceReplicaSet
Metadata:
Creation Timestamp: ?2022-05-02T13:50:05Z
Generation: ? ? ? ? ?2
Managed Fields:
API Version: ?kubevirt.io/v1alpha3
Fields Type: ?FieldsV1
fieldsV1:
f:metadata:
f:annotations:
f:kubevirt.io/latest-observed-api-version:
f:kubevirt.io/storage-observed-api-version:
f:spec:
f:template:
f:metadata:
f:creationTimestamp:
f:status:
.:
f:labelSelector:
f:replicas:
Manager: ? ? ?Go-http-client
Operation: ? ?Update
Time: ? ? ? ? 2022-05-02T13:50:05Z
API Version: ?kubevirt.io/v1alpha3
Fields Type: ?FieldsV1
fieldsV1:
f:metadata:
f:annotations:
...
...
.:
f:memory:
f:volumes:
Manager: ? ? ? ? kubectl
Operation: ? ? ? Update
Time: ? ? ? ? ? ?2022-05-02T13:50:05Z
Resource Version: ?267261
Self Link: ? ? ? ? /apis/kubevirt.io/v1/namespaces/default/virtualmachineinstancereplicasets/testreplicaset
UID: ? ? ? ? ? ? ? 96d17d12-17b5-4df7-940a-fac7c6b820d2
Spec:
Replicas: ?2
Selector:
Match Labels:
Myvmi: ?myvmi
Template:
Metadata:
Creation Timestamp: ?
Labels:
Myvmi: ?myvmi
Spec:
Domain:
Devices:
Disks:
Disk:
Bus: ?virtio
Name: ? containerdisk
Resources:
Requests:
Memory: ?1024M
Volumes:
Container Disk:
Image: ? ? ? ? ? ? ?kubevirt/cirros-container-disk-demo
Image Pull Policy: ?IfNotPresent
Name: ? ? ? ? ? ? ? ? containerdisk
Status:
Label Selector: ?myvmi=myvmi
Replicas: ? ? ? ?2
Events:
Type ? ?Reason ? ? ? ? ? ?Age ? ?From ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Message
---- ? ?------ ? ? ? ? ? ?---- ? ---- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -------
Normal ?SuccessfulCreate ?5m21s ?virtualmachinereplicaset-controller ?Started the virtual machine by creating the new virtual machine instance testreplicaseth6zsl
Normal ?SuccessfulCreate ?5m21s ?virtualmachinereplicaset-controller ?Started the virtual machine by creating the new virtual machine instance testreplicasetw75s4
```
### 擴縮容
1. 查看vmis
```bash
[root@master vm]# kubectl get -f vmis.yaml
NAME ? ? ? ? ? ? DESIRED ? CURRENT ? READY ? AGE
testreplicaset ? 3 ? ? ? ? 3 ? ? ? ? ? ? ? ? 2m52s
```
2. 使用scale命令,設置副本數為5
```bash
[root@master vm]# kubectl scale vmirs testreplicaset --replicas 5
virtualmachineinstancereplicaset.kubevirt.io/testreplicaset scaled
```
3. 查看效果
```bash
[root@master vm]# kubectl get vmis
NAME ? ? ? ? ? ? ? ? ?AGE ? ? PHASE ? ? IP ? ? ? ? ? ? NODENAME ? READY
testreplicaset98x8d ? 5m29s ? Running ? 10.244.0.146 ? master ? ? False
testreplicasetddqc9 ? 2m24s ? Running ? 10.244.0.148 ? master ? ? False
testreplicasetdss8l ? 5m29s ? Running ? 10.244.0.144 ? master ? ? False
testreplicasetmhm6x ? 5m29s ? Running ? 10.244.0.145 ? master ? ? False
testreplicasetv4dzs ? 2m24s ? Running ? 10.244.0.147 ? master ? ? False
[root@master vm]# kubectl get pod
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? STATUS ? ?RESTARTS ? AGE
virt-launcher-testreplicaset98x8d-5p99p ? 2/2 ? ? Running ? 0 ? ? ? ? ?3m15s
virt-launcher-testreplicasetddqc9-6c2m4 ? 2/2 ? ? Running ? 0 ? ? ? ? ?10s
virt-launcher-testreplicasetdss8l-9mv56 ? 2/2 ? ? Running ? 0 ? ? ? ? ?3m15s
virt-launcher-testreplicasetmhm6x-r76wt ? 2/2 ? ? Running ? 0 ? ? ? ? ?3m15s
virt-launcher-testreplicasetv4dzs-bm4s8 ? 2/2 ? ? Running ? 0 ? ? ? ? ?10s
```
### 彈性伸縮
#### 方法1
1. 使用Horizo ntal Pod Autoscaler(hpa),創建yaml文件
```bash
[root@master vm]# cat vmis-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: null
name: testreplicaset
spec:
maxReplicas: 5
minReplicas: 2
scaleTargetRef:
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstanceReplicaSet
name: testreplicaset
```
2. 創建vmis-hpa
```bash
[root@master vm]# kubectl apply -f vmis-hpa.yaml
horizontalpodautoscaler.autoscaling/testreplicaset created
```
3. 查看狀態
```bash
[root@master vm]# kubectl get hpa
NAME ? ? ? ? ? ? REFERENCE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TARGETS ? ? ? ? MINPODS ? MAXPODS ? REPLICAS ? AGE
testreplicaset ? VirtualMachineInstanceReplicaSet/testreplicaset ?
```
#### 方法2
1. 使用`kubectl autoscale`命令
```bash
[root@master vm]# kubectl autoscale vmirs testreplicaset --min=2 --max=5
```
Kubernetes Linux 容器 彈性伸縮 AS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。