Skip to content

Commit bb6b2f8

Browse files
Merge pull request #510 from TrekkieCoder/main
PR - cicd : scenario for k3s single-node incluster with calico
2 parents 12fe978 + 2f9bb43 commit bb6b2f8

17 files changed

+495
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# -*- mode: ruby -*-
2+
# vi: set ft=ruby :
3+
4+
workers = (ENV['WORKERS'] || "2").to_i
5+
#box_name = (ENV['VAGRANT_BOX'] || "ubuntu/focal64")
6+
box_name = (ENV['VAGRANT_BOX'] || "sysnet4admin/Ubuntu-k8s")
7+
box_version = "0.7.1"
8+
Vagrant.configure("2") do |config|
9+
config.vm.box = "#{box_name}"
10+
config.vm.box_version = "#{box_version}"
11+
12+
if Vagrant.has_plugin?("vagrant-vbguest")
13+
config.vbguest.auto_update = false
14+
end
15+
16+
config.vm.define "host" do |host|
17+
host.vm.hostname = 'host1'
18+
host.vm.network :private_network, ip: "192.168.82.2", :netmask => "255.255.255.0"
19+
host.vm.provision :shell, :path => "host.sh"
20+
host.vm.provider :virtualbox do |vbox|
21+
vbox.customize ["modifyvm", :id, "--memory", 2048]
22+
vbox.customize ["modifyvm", :id, "--cpus", 2]
23+
end
24+
end
25+
26+
config.vm.define "master1" do |master|
27+
master.vm.hostname = 'master1'
28+
master.vm.network :private_network, ip: "192.168.82.128", :netmask => "255.255.255.0"
29+
master.vm.provision :shell, :path => "master1.sh"
30+
master.vm.provider :virtualbox do |vbox|
31+
vbox.customize ["modifyvm", :id, "--memory", 8192]
32+
vbox.customize ["modifyvm", :id, "--cpus", 8]
33+
end
34+
end
35+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: netshoot-2
5+
labels:
6+
app: MyApp1
7+
kubernetes.io/hostname: master
8+
spec:
9+
containers:
10+
- name: netshoot
11+
image: nicolaka/netshoot
12+
imagePullPolicy: IfNotPresent
13+
command: [ "sleep" ]
14+
args: [ "infinity" ]
15+
ports:
16+
- name: svr
17+
containerPort: 32345
18+
protocol: TCP
19+
securityContext:
20+
capabilities:
21+
add:
22+
- all
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
vagrant global-status | grep -i virtualbox | cut -f 1 -d ' ' | xargs -L 1 vagrant destroy -f
3+
vagrant up
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
sudo su
2+
echo "123.123.123.1 k8s-svc" >> /etc/hosts
3+
ifconfig eth2 mtu 1450
4+
ip route add 123.123.123.0/24 via 192.168.90.10
5+
echo "Host is up"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
---
2+
apiVersion: v1
3+
kind: ServiceAccount
4+
metadata:
5+
name: kube-loxilb
6+
namespace: kube-system
7+
---
8+
kind: ClusterRole
9+
apiVersion: rbac.authorization.k8s.io/v1
10+
metadata:
11+
name: kube-loxilb
12+
rules:
13+
- apiGroups:
14+
- ""
15+
resources:
16+
- nodes
17+
verbs:
18+
- get
19+
- watch
20+
- list
21+
- patch
22+
- apiGroups:
23+
- ""
24+
resources:
25+
- pods
26+
verbs:
27+
- get
28+
- watch
29+
- list
30+
- patch
31+
- apiGroups:
32+
- ""
33+
resources:
34+
- endpoints
35+
- services
36+
- services/status
37+
verbs:
38+
- get
39+
- watch
40+
- list
41+
- patch
42+
- update
43+
- apiGroups:
44+
- discovery.k8s.io
45+
resources:
46+
- endpointslices
47+
verbs:
48+
- get
49+
- watch
50+
- list
51+
- apiGroups:
52+
- authentication.k8s.io
53+
resources:
54+
- tokenreviews
55+
verbs:
56+
- create
57+
- apiGroups:
58+
- authorization.k8s.io
59+
resources:
60+
- subjectaccessreviews
61+
verbs:
62+
- create
63+
---
64+
kind: ClusterRoleBinding
65+
apiVersion: rbac.authorization.k8s.io/v1
66+
metadata:
67+
name: kube-loxilb
68+
roleRef:
69+
apiGroup: rbac.authorization.k8s.io
70+
kind: ClusterRole
71+
name: kube-loxilb
72+
subjects:
73+
- kind: ServiceAccount
74+
name: kube-loxilb
75+
namespace: kube-system
76+
---
77+
apiVersion: apps/v1
78+
kind: Deployment
79+
metadata:
80+
name: kube-loxilb
81+
namespace: kube-system
82+
labels:
83+
app: kube-loxilb-app
84+
spec:
85+
replicas: 1
86+
selector:
87+
matchLabels:
88+
app: kube-loxilb-app
89+
template:
90+
metadata:
91+
labels:
92+
app: kube-loxilb-app
93+
spec:
94+
hostNetwork: true
95+
dnsPolicy: ClusterFirstWithHostNet
96+
tolerations:
97+
- effect: NoSchedule
98+
operator: Exists
99+
# Mark the pod as a critical add-on for rescheduling.
100+
- key: CriticalAddonsOnly
101+
operator: Exists
102+
- effect: NoExecute
103+
operator: Exists
104+
priorityClassName: system-node-critical
105+
serviceAccountName: kube-loxilb
106+
terminationGracePeriodSeconds: 0
107+
containers:
108+
- name: kube-loxilb
109+
image: ghcr.io/loxilb-io/kube-loxilb:latest
110+
imagePullPolicy: Always
111+
command:
112+
- /bin/kube-loxilb
113+
args:
114+
- --loxiURL=http://192.168.82.128:11111
115+
- --externalCIDR=192.168.80.5/32
116+
#- --externalSecondaryCIDRs=124.124.124.1/24,125.125.125.1/24
117+
#- --setBGP=64512
118+
#- --listenBGPPort=1791
119+
- --setRoles=0.0.0.0
120+
#- --monitor
121+
#- --extBGPPeers=50.50.50.1:65101,51.51.51.1:65102
122+
#- --setLBMode=1
123+
#- --config=/opt/loxilb/agent/kube-loxilb.conf
124+
resources:
125+
requests:
126+
cpu: "100m"
127+
memory: "50Mi"
128+
limits:
129+
cpu: "100m"
130+
memory: "50Mi"
131+
securityContext:
132+
privileged: true
133+
capabilities:
134+
add: ["NET_ADMIN", "NET_RAW"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
apiVersion: apps/v1
2+
kind: DaemonSet
3+
metadata:
4+
name: loxilb-lb
5+
namespace: kube-system
6+
spec:
7+
selector:
8+
matchLabels:
9+
app: loxilb-app
10+
template:
11+
metadata:
12+
name: loxilb-lb
13+
labels:
14+
app: loxilb-app
15+
spec:
16+
hostNetwork: true
17+
dnsPolicy: ClusterFirstWithHostNet
18+
tolerations:
19+
- key: "node-role.kubernetes.io/master"
20+
operator: Exists
21+
- key: "node-role.kubernetes.io/control-plane"
22+
operator: Exists
23+
affinity:
24+
nodeAffinity:
25+
requiredDuringSchedulingIgnoredDuringExecution:
26+
nodeSelectorTerms:
27+
- matchExpressions:
28+
- key: "node-role.kubernetes.io/master"
29+
operator: Exists
30+
- key: "node-role.kubernetes.io/control-plane"
31+
operator: Exists
32+
containers:
33+
- name: loxilb-app
34+
image: "ghcr.io/loxilb-io/loxilb:debug"
35+
imagePullPolicy: Always
36+
command: [ "/root/loxilb-io/loxilb/loxilb", "--egr-hooks", "--blacklist=cali.|tunl.|vxlan[.]calico|veth.|cni[0-9a-z]" ]
37+
#command: [ "sleep" ]
38+
#args: [ "infinity" ]
39+
ports:
40+
- containerPort: 11111
41+
- containerPort: 1791
42+
- containerPort: 50051
43+
securityContext:
44+
privileged: true
45+
capabilities:
46+
add:
47+
- SYS_ADMIN
48+
---
49+
apiVersion: v1
50+
kind: Service
51+
metadata:
52+
name: loxilb-lb-service
53+
namespace: kube-system
54+
spec:
55+
clusterIP: None
56+
selector:
57+
app: loxilb-app
58+
ports:
59+
- name: loxilb-app
60+
port: 11111
61+
targetPort: 11111
62+
protocol: TCP
63+
- name: loxilb-app-bgp
64+
port: 1791
65+
targetPort: 1791
66+
protocol: TCP
67+
- name: loxilb-app-gobgp
68+
port: 50051
69+
targetPort: 50051
70+
protocol: TCP
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
sudo su
2+
export MASTER_IP=$(ip a |grep global | grep -v '10.0.2.15' | grep -v '192.168.90' | grep '192.168.82' | awk '{print $2}' | cut -f1 -d '/')
3+
curl -fL https://get.k3s.io | sh -s - server --node-ip=192.168.82.128 --disable servicelb --disable traefik --cluster-init external-hostname=192.168.82.128 --node-external-ip=192.168.82.128 --disable-cloud-controller --kubelet-arg cloud-provider=external --flannel-backend=none --disable-network-policy --cluster-cidr=172.16.219.0/24
4+
sleep 60
5+
echo $MASTER_IP > /vagrant/master-ip
6+
cp /var/lib/rancher/k3s/server/node-token /vagrant/node-token
7+
sed -i -e "s/127.0.0.1/${MASTER_IP}/g" /etc/rancher/k3s/k3s.yaml
8+
cp /etc/rancher/k3s/k3s.yaml /vagrant/k3s.yaml
9+
#sudo kubectl apply -f /vagrant/loxilb.yml
10+
#sudo kubectl apply -f /vagrant/kube-loxilb.yml
11+
sudo kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml
12+
sudo kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml
13+
/vagrant/wait_ready.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
sudo su
2+
export WORKER_ADDR=$(ip a |grep global | grep -v '10.0.2.15' | grep '192.168.80' | awk '{print $2}' | cut -f1 -d '/')
3+
export MASTER_ADDR=$(cat /vagrant/master-ip)
4+
export NODE_TOKEN=$(cat /vagrant/node-token)
5+
6+
curl -fL https://get.k3s.io | K3S_TOKEN=${NODE_TOKEN} sh -s - server --server https://192.168.80.10:6443 --disable traefik --disable servicelb --node-ip=192.168.80.11 external-hostname=192.168.80.11 --node-external-ip=192.168.80.11 -t ${NODE_TOKEN}
7+
8+
/vagrant/wait_ready.sh
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: nginx-lb1
5+
annotations:
6+
loxilb.io/lbmode: "fullnat"
7+
spec:
8+
externalTrafficPolicy: Local
9+
loadBalancerClass: loxilb.io/loxilb
10+
selector:
11+
what: nginx-test
12+
ports:
13+
- port: 55002
14+
targetPort: 80
15+
type: LoadBalancer
16+
---
17+
apiVersion: v1
18+
kind: Pod
19+
metadata:
20+
name: nginx-test
21+
labels:
22+
what: nginx-test
23+
spec:
24+
affinity:
25+
nodeAffinity:
26+
requiredDuringSchedulingIgnoredDuringExecution:
27+
nodeSelectorTerms:
28+
- matchExpressions:
29+
- key: "node-role.kubernetes.io/master"
30+
operator: Exists
31+
# - key: "node-role.kubernetes.io/control-plane"
32+
# operator: DoesNotExist
33+
containers:
34+
- name: nginx-test
35+
image: ghcr.io/loxilb-io/nginx:stable
36+
ports:
37+
- containerPort: 80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
vagrant destroy -f master2
3+
vagrant destroy -f host
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: sctp-lb1
5+
annotations:
6+
loxilb.io/liveness: "yes"
7+
loxilb.io/lbmode: "fullnat"
8+
spec:
9+
loadBalancerClass: loxilb.io/loxilb
10+
externalTrafficPolicy: Local
11+
selector:
12+
what: sctp-test
13+
ports:
14+
- port: 55004
15+
protocol: SCTP
16+
targetPort: 9999
17+
type: LoadBalancer
18+
---
19+
apiVersion: v1
20+
kind: Pod
21+
metadata:
22+
name: sctp-test
23+
labels:
24+
what: sctp-test
25+
spec:
26+
containers:
27+
- name: sctp-test
28+
image: ghcr.io/loxilb-io/alpine-socat:latest
29+
command: [ "sh", "-c"]
30+
args:
31+
- while true; do
32+
socat -v -T2 sctp-l:9999,reuseaddr,fork system:"echo 'server1'; cat";
33+
sleep 20;
34+
done;
35+
ports:
36+
- containerPort: 9999
37+
env:
38+
- name: MY_POD_IP
39+
valueFrom:
40+
fieldRef:
41+
fieldPath: status.podIP
Binary file not shown.

0 commit comments

Comments
 (0)