有个问题你看下是和你确认还是和产品确认下,比如要创建一个虚拟机(内存8G),但是在集群中所有node上内存都< 8G,kubevirt找不到合适的node 来部署这个虚拟机,那么虚拟机状态一直是Scheduling调度状态,
正常创建虚拟机的时候,会有一个等待虚拟机Scheduling,部署的时间,这个时间可能要根据硬件等来配置
-kubevirt遇到的问题(有可能不是问题,使用的方法不对)------------------------------------------
1.一个node从集群中下线了,删除这个集群上的虚拟机时,可以删除vms,但是vmis删除不掉,等这个node上线了(这个node已经),会自动删除掉
2. node已经关闭了,但是使用kubectl get pod -n kubevirt看到该node上的virt-handler还是running 状态的,导致还是会有虚拟机调度到该node
--------------------------------------------------------------------------
在其他的node上: yum -y install qemu-kvm libvirt virt-install bridge-utils
在master节点上
export KUBEVIRT_VERSION="v0.34.0"
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
kubectl -n kubevirt wait kv kubevirt --for condition=Available
#查看kubevirt是否都启动了,如果不是running状态,查看下日志,看是否防火墙拦截了端口
kubectl get pod -n kubevirt
curl -L -o virtctl \
https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
chmod +x virtctl
这种方式只要pod重启,虚拟机中的数据就没有了(虚拟机重启数据还在)
kubectl apply -f https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml
kubectl get vms
kubectl delete vms testvm
# 启动vm(vm启动之后,生成了vmis,如果用virtctl stop testvm,vmis就退出了,但是vms还在)
$ ./virtctl start testvm
#命令行模式进入刚刚创建的vm
$ ./virtctl console testvm
kubectl get vmis
查看vmis详情: kubectl describe vmis testvmi-disk
-------------------------------
https://github.com/kubevirt/client-python
https://github.com/kubevirt/client-go
kubectl api-versions https://www.cnblogs.com/dalianpai/p/12072844.html
kubectl get namespace
kubectl get pod
kubectl describe pod xiaoyu-pod
kubectl apply -f my.yaml
kubectl delete -f my.yaml
标签-------------------------
kubectl get pod --show-labels
kubectl get node --show-labels
kubectl get pods -L version --show-labels
添加pod kubectl label pod frontend-g8c5f name=xiaoyu
修改已有的pod: kubectl label pod frontend-g8c5f tier=frontend1 --overwrite=true
---pod管理--------------------------------------
kubectl get pod --all-namespaces
kubectl delete pod --all 删除默认空间下的pod
重启( AGE会从0开始计算) kubectl get pod PODNAME -n NAMESPACE -o yaml | kubectl replace --force -f -
进入pod中的docker kubectl exec test-pd -c test-container -it /bin/bash
删除pod kubectl delete rs --all
Back-off restarting failed container
command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
创建的docker name命名规则包含 pod名称_容器名称_ id
查看pod中docker日志 kubectl logs -f xiaoyu-pod -c xiaoyu-rabbit
------------------------网络
https://www.cnblogs.com/saneri/p/13597732.html
1. 指定spec.hostNetwork: true, 可以直接通过宿主机的ip加服务端口访问(get pod -o wide显示的是node ip),如:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
hostNetwork: true
containers:
- name: nginx
image: nginx
缺点: pod漂移到其他node上之后,服务就失效了.
2.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80 #pod容器指定的端口
hostPort: 9090 #映射到node主机的端口
pod启动后如下,可以看到,pod的ip地址是内部网络ip,与宿主机node的ip不同;与hostNetwork一样,
nodeip + hostPort访问
性能不如hostNetwork,因为需要经过iptables的转发才能到达Pod
3. SVC NodePort 每个节点都打开一个端口
NodePort是一种service,其使用的是宿主机node上的端口号,从集群外以 任意node的ip + nodePort 来访问Pod的服务
存储-------------------------------------------------
1. emptyDir 通一个pod中的docker容器之间能够共享,容器重启不会丢失,pod重启就没有了
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /home/testempdir #这个目录无需先创建,会自动生成, 还可以挂载到其他容器的其他路径 如/home/redis,对应的都是emptyDir
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
2. hostPath
把宿主机上的目录,文件映射到pod上,pod上的docker都能共享,docker也能写该目录
3.
动态PVC 要启用基于存储级别的动态存储配置,集群管理员需要启用 API server 上的 DefaultStorageClass
apiVersion: v1
kind: PersistentVolume
metadata:
name: kubevm1
spec:
capacity:
storage: 22Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /home/data/vmpool
server: 192.168.91.137
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: kubepvc1
spec:
storageClassName: nfs
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 23Gi
---ReplicaSet------------------------------------
kubectl apply -f deployment.yaml
获取rs kubectl get rs
扩容 kubectl scale deployment my-nginx --replicas=4
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80
--Deployment------------------------------------------
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:1.7.9
ports:
- containerPort: 80
yum install -y nfs-common nfs-utils rpcbind
mkdir /nfsdata
chmod 666 /nfsdata
chown nfsnobody /nfsdata
cat /etc/exports
/nfsdata *(rw,no_root_squash,no_all_squash,sync)
systemctl start rpcbind
systemctl start nfs
cdi安装------------------------------------------------------------------------------------------------------
$ kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/v1.26.1/cdi-operator.yaml
$ kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/v1.26.1/cdi-cr.yaml
kubeadm join 192.168.91.128:6443 --token hji5n2.dbwgx6l83oyyqip6 --discovery-token-ca-cert-hash \sha256:73a8d44fd5d515b029ad298976941ccc4c58d070bf9e40133039d79273d7f45e --ignore-preflight-errors=all
#上传镜像
virtctl image-upload dv cirros-vm-disk --size=500Mi --image-path=/home/cirros-0.4.0-x86_64-disk.img --uploadproxy-url=https://10.10.226.58
virtctl image-upload pvc mypvc --no-create --image-path=/home/win10.img --uploadproxy-url=https://10.10.226.58 \
--insecure \
--wait-secs=240
#上传ISO
virtctl image-upload \
--image-path='/home/win10.iso' \
--pvc-name=iso-win10 \
--pvc-size=6G \
--uploadproxy-url=https://10.10.226.58 \
--insecure \
--wait-secs=240
-------------------------------------------------------