[ADD] Added k8ssalt

This commit is contained in:
Anonymous 2023-08-04 14:22:51 +00:00
parent 0fc89eb375
commit 37de58ae74
4 changed files with 259 additions and 0 deletions

74
deploySalt.sh Executable file
View File

@ -0,0 +1,74 @@
#!/bin/bash
applySed=0
checkReplicas() {
if [[ "$1" == "-r" ]]; then
shift
if [[ "$1" =~ ^[0-9]+$ ]]; then
replicas="$1"
applySed=1
else
echo "Error: Invalid REPLICAS value. Please provide a positive integer."
exit 1
fi
shift
else
replicas=1
fi
}
applySaltMinion() {
if [ "$applySed" -eq 1 ]; then
echo "Applying Salt-minion yaml with $replicas replicas..."
sed "s/replicas:.*/replicas: $replicas/" salt-minion.yaml | kubectl apply -f -
else
echo "Applying Salt-minion yaml..."
kubectl apply -f salt-minion.yaml
fi
}
deleteSalt() {
echo "Deleting Salt infrastructure..."
kubectl delete -f salt-minion.yaml
kubectl delete -f salt-master.yaml
echo "Salt infrastructure deleted."
}
waitUntilSaltMasterInitialized() {
attempts=0
max_attempts=10
while [ "$attempts" -lt "$max_attempts" ]; do
echo "Checking if Salt-master has initialized..."
sleep 5
if kubectl exec "$saltmaster" -it -- /bin/sh -c "salt-key -L" | grep -q "minion"; then
echo "Salt-master is up and running. Accepting minion keys..."
kubectl exec "$saltmaster" -it -- /bin/sh -c "salt-key -A -y"
break
fi
((attempts++))
done
}
deploySalt() {
if [[ "$1" == "-d" ]]; then
deleteSalt
else
checkReplicas "$@"
applySaltMinion
echo "Applying Salt-master yaml..."
kubectl apply -f salt-master.yaml
echo "Checking for Salt-master pod name..."
saltmaster=$(kubectl get pods | grep salt-master | cut -d ' ' -f 1)
kubectl wait --for=condition=Ready "pod/$saltmaster" --timeout=300s
waitUntilSaltMasterInitialized
fi
}
clear
# Call the main function
deploySalt "$@"

72
salt-master.yaml Normal file
View File

@ -0,0 +1,72 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: salt-master
namespace: webserver
spec:
replicas: 1
selector:
matchLabels:
app: salt
template:
metadata:
labels:
app: salt
spec:
containers:
- name: salt
image: saltstack/salt
envFrom:
- configMapRef:
name: salt-master-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: salt-master-config
namespace: webserver
data:
SALT_API_CONFIG: |
{
"rest_cherrypy": {
"port": 8000,
"ssl_crt": "/etc/pki/tls/certs/localhost.crt",
"ssl_key": "/etc/pki/tls/certs/localhost.key"
},
"external_auth": {
"sharedsecret": {
"salt": [
".*",
"@wheel",
"@jobs",
"@runner"
]
}
},
"sharedsecret": "saFGGAIGJitwajisajT612QTjq3ifap14"
}
---
apiVersion: v1
kind: Service
metadata:
name: salt-master-service
namespace: webserver
spec:
selector:
app: salt # Select the Pods based on their labels (should match the Deployment labels)
ports:
- name: rest
protocol: TCP
port: 8000 # Port for REST API
targetPort: 8000 # Port on the container to which REST API traffic will be forwarded
- name: minion
protocol: TCP
port: 4505 # Port for Salt Minion
targetPort: 4505 # Port on the container to which Salt Minion traffic will be forwarded
- name: master
protocol: TCP
port: 4506 # Port for Salt Master
targetPort: 4506 # Port on the container to which Salt Master traffic will be forwarded
type: ClusterIP # This creates an internal ClusterIP Service
clusterIP: 10.43.14.232

37
salt-minion.yaml Normal file
View File

@ -0,0 +1,37 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: salt-minion
namespace: webserver
spec:
replicas: 1
selector:
matchLabels:
app: salt-miniondev
template:
metadata:
labels:
app: salt-miniondev
spec:
volumes:
- name: salt-miniondev-config
configMap:
name: salt-miniondev-config
containers:
- name: salt-miniondev
image: saltstack/salt
command: ["/bin/sh", "-c"]
args: ["salt-minion"]
volumeMounts:
- name: salt-miniondev-config
mountPath: /etc/salt/minion.d
---
apiVersion: v1
kind: ConfigMap
metadata:
name: salt-miniondev-config
namespace: webserver
data:
default.conf: |
master: 10.43.14.232

View File

@ -0,0 +1,76 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: salt-master
namespace: webserver
spec:
replicas: 1
selector:
matchLabels:
app: salt
template:
metadata:
labels:
app: salt
spec:
containers:
- name: salt
image: saltstack/salt
envFrom:
- configMapRef:
name: salt-master-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: salt-master-config
namespace: webserver
data:
SALT_API_CONFIG: |
{
"rest_cherrypy": {
"port": 8000,
"ssl_crt": "/etc/pki/tls/certs/localhost.crt",
"ssl_key": "/etc/pki/tls/certs/localhost.key"
},
"external_auth": {
"sharedsecret": {
"salt": [
".*",
"@wheel",
"@jobs",
"@runner"
]
}
},
"sharedsecret": "saFGGAIGJitwajisajT612QTjq3ifap14"
}
master.conf: |
{
"auto_accept": True
}
---
apiVersion: v1
kind: Service
metadata:
name: salt-master-service
namespace: webserver
spec:
selector:
app: salt # Select the Pods based on their labels (should match the Deployment labels)
ports:
- name: rest
protocol: TCP
port: 8000 # Port for REST API
targetPort: 8000 # Port on the container to which REST API traffic will be forwarded
- name: minion
protocol: TCP
port: 4505 # Port for Salt Minion
targetPort: 4505 # Port on the container to which Salt Minion traffic will be forwarded
- name: master
protocol: TCP
port: 4506 # Port for Salt Master
targetPort: 4506 # Port on the container to which Salt Master traffic will be forwarded
type: ClusterIP # This creates an internal ClusterIP Service
clusterIP: 10.43.14.232