blob: a8af071fa7df118535c3004bb6649b028e4e925a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
#!/bin/bash
# SPDX-license-identifier: Apache-2.0
##############################################################################
# Copyright (c) 2018
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
set -o errexit
set -o nounset
set -o pipefail
rm -f $HOME/*.yaml
virtlet_image=virtlet.cloud/fedora
pod_name=virtlet-pod
deployment_name=virtlet-deployment
cat << POD > $HOME/$pod_name.yaml
apiVersion: v1
kind: Pod
metadata:
name: $pod_name
annotations:
# This tells CRI Proxy that this pod belongs to Virtlet runtime
kubernetes.io/target-runtime: virtlet.cloud
VirtletCloudInitUserDataScript: |
#!/bin/sh
echo hello world
spec:
# This nodeAffinity specification tells Kubernetes to run this
# pod only on the nodes that have extraRuntime=virtlet label.
# This label is used by Virtlet DaemonSet to select nodes
# that must have Virtlet runtime
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: extraRuntime
operator: In
values:
- virtlet
containers:
- name: $pod_name
# This specifies the image to use.
# virtlet.cloud/ prefix is used by CRI proxy, the remaining part
# of the image name is prepended with https:// and used to download the image
image: $virtlet_image
imagePullPolicy: IfNotPresent
# tty and stdin required for "kubectl attach -t" to work
tty: true
stdin: true
resources:
limits:
# This memory limit is applied to the libvirt domain definition
memory: 160Mi
POD
cat << DEPLOYMENT > $HOME/$deployment_name.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: $deployment_name
labels:
app: virtlet
spec:
replicas: 1
selector:
matchLabels:
app: virtlet
template:
metadata:
labels:
app: virtlet
annotations:
# This tells CRI Proxy that this pod belongs to Virtlet runtime
kubernetes.io/target-runtime: virtlet.cloud
VirtletCloudInitUserDataScript: |
#!/bin/sh
echo hello world
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: extraRuntime
operator: In
values:
- virtlet
containers:
- name: $deployment_name
# This specifies the image to use.
# virtlet.cloud/ prefix is used by CRI proxy, the remaining part
# of the image name is prepended with https:// and used to download the image
image: $virtlet_image
imagePullPolicy: IfNotPresent
# tty and stdin required for "kubectl attach -t" to work
tty: true
stdin: true
resources:
limits:
# This memory limit is applied to the libvirt domain definition
memory: 160Mi
DEPLOYMENT
if $(kubectl version &>/dev/null); then
kubectl delete pod $pod_name --ignore-not-found=true --now
kubectl delete deployment $deployment_name --ignore-not-found=true --now
while kubectl get pod $pod_name &>/dev/null; do
sleep 5
done
kubectl create -f $HOME/$pod_name.yaml
while kubectl get deployment $deployment_name &>/dev/null; do
sleep 5
done
kubectl create -f $HOME/$deployment_name.yaml
sleep 5
deployment_pod=$(kubectl get pods | grep $deployment_name | awk '{print $1}')
for pod in $pod_name $deployment_pod; do
status_phase=""
while [[ $status_phase != "Running" ]]; do
new_phase=$(kubectl get pods $pod | awk 'NR==2{print $3}')
if [[ $new_phase != $status_phase ]]; then
echo "$(date +%H:%M:%S) - $pod : $new_phase"
status_phase=$new_phase
fi
if [[ $new_phase == "Err"* ]]; then
exit 1
fi
done
done
kubectl plugin virt virsh list
for pod in $pod_name $deployment_name; do
virsh_image=$(kubectl plugin virt virsh list | grep "virtlet-.*-$pod")
if [[ -z "$virsh_image" ]]; then
exit 1
fi
done
fi
|