mirror of https://github.com/knative/func.git
feat: local cluster allocation, configuration and teardown
This commit is contained in:
parent
80e366b142
commit
9c499b69c4
|
|
@ -0,0 +1,125 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
#
|
||||||
|
# Allocate a local kind cluster with Knative and Kourier installed.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
main() {
|
||||||
|
|
||||||
|
local serving_version=v0.20.0
|
||||||
|
local eventing_version=v0.20.0
|
||||||
|
local kourier_version=v0.20.0
|
||||||
|
|
||||||
|
local em=$(tput bold)$(tput setaf 2)
|
||||||
|
local me=$(tput sgr0)
|
||||||
|
|
||||||
|
echo "${em}Allocating...${me}"
|
||||||
|
|
||||||
|
cluster
|
||||||
|
serving
|
||||||
|
eventing
|
||||||
|
networking
|
||||||
|
registry
|
||||||
|
next_steps
|
||||||
|
|
||||||
|
echo "${em}DONE${me}"
|
||||||
|
}
|
||||||
|
|
||||||
|
cluster() {
|
||||||
|
echo "${em}① Cluster${me}"
|
||||||
|
cat <<EOF | kind create cluster --wait=60s --config=-
|
||||||
|
kind: Cluster
|
||||||
|
apiVersion: kind.x-k8s.io/v1alpha4
|
||||||
|
nodes:
|
||||||
|
- role: control-plane
|
||||||
|
- role: worker
|
||||||
|
extraPortMappings:
|
||||||
|
- containerPort: 30080
|
||||||
|
hostPort: 80
|
||||||
|
listenAddress: "127.0.0.1"
|
||||||
|
- containerPort: 30443
|
||||||
|
hostPort: 443
|
||||||
|
listenAddress: "127.0.0.1"
|
||||||
|
containerdConfigPatches:
|
||||||
|
- |-
|
||||||
|
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
|
||||||
|
endpoint = ["http://kind-registry:5000"]
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
serving() {
|
||||||
|
echo "${em}② Knative Serving${me}"
|
||||||
|
kubectl apply --filename https://github.com/knative/serving/releases/download/$serving_version/serving-crds.yaml
|
||||||
|
sleep 2
|
||||||
|
curl -L -s https://github.com/knative/serving/releases/download/$serving_version/serving-core.yaml | yq 'del(.spec.template.spec.containers[]?.resources)' -y | yq 'del(.metadata.annotations."knative.dev/example-checksum")' -y | kubectl apply -f -
|
||||||
|
}
|
||||||
|
|
||||||
|
eventing() {
|
||||||
|
echo "${em}③ Knative Eventing${me}"
|
||||||
|
kubectl apply --filename https://github.com/knative/eventing/releases/download/$eventing_version/eventing-crds.yaml
|
||||||
|
sleep 2
|
||||||
|
curl -L -s https://github.com/knative/eventing/releases/download/$eventing_version/eventing-core.yaml | yq 'del(.spec.template.spec.containers[]?.resources)' -y | yq 'del(.metadata.annotations."knative.dev/example-checksum")' -y | kubectl apply -f -
|
||||||
|
curl -L -s https://github.com/knative/eventing/releases/download/$eventing_version/in-memory-channel.yaml | yq 'del(.spec.template.spec.containers[]?.resources)' -y | yq 'del(.metadata.annotations."knative.dev/example-checksum")' -y | kubectl apply -f -
|
||||||
|
curl -L -s https://github.com/knative/eventing/releases/download/$eventing_version/mt-channel-broker.yaml | yq 'del(.spec.template.spec.containers[]?.resources)' -y | yq 'del(.metadata.annotations."knative.dev/example-checksum")' -y | kubectl apply -f -
|
||||||
|
}
|
||||||
|
|
||||||
|
networking() {
|
||||||
|
echo "${em}④ Kourier Networking${me}"
|
||||||
|
kubectl apply --filename https://github.com/knative-sandbox/net-kourier/releases/download/$kourier_version/kourier.yaml
|
||||||
|
kubectl patch configmap/config-network \
|
||||||
|
--namespace knative-serving \
|
||||||
|
--type merge \
|
||||||
|
--patch '{"data":{"ingress.class":"kourier.ingress.networking.knative.dev"}}'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
registry() {
|
||||||
|
# see https://kind.sigs.k8s.io/docs/user/local-registry/
|
||||||
|
|
||||||
|
echo "${em}⑤ Container Registry${me}"
|
||||||
|
docker run -d --restart=always -p "5000:5000" --name "kind-registry" registry:2
|
||||||
|
docker network connect "kind" "kind-registry"
|
||||||
|
cat <<EOF | kubectl apply -f -
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: local-registry-hosting
|
||||||
|
namespace: kube-public
|
||||||
|
data:
|
||||||
|
localRegistryHosting.v1: |
|
||||||
|
host: "localhost:5000"
|
||||||
|
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
next_steps() {
|
||||||
|
local red=$(tput bold)$(tput setaf 1)
|
||||||
|
|
||||||
|
echo "${em}⑥ Configure Registry${me}"
|
||||||
|
echo "Please ${red}manually add 'kind-registry' to your local hosts${me} file:"
|
||||||
|
echo " echo \"127.0.0.1 kind-registry\" | sudo tee --append /etc/hosts"
|
||||||
|
|
||||||
|
echo "Please ${red}manually set registry as insecure${me} in the docker daemon config (/etc/docker/daemon.json on linux or ~/.docker/daemon.json on OSX):
|
||||||
|
{
|
||||||
|
\"insecure-registries\": [ \"kind-registry:5000\" ],
|
||||||
|
}"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
|
|
@ -0,0 +1,167 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configures the current cluster for use with Functions
|
||||||
|
#
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
DEFAULT_NAMESPACE=func
|
||||||
|
|
||||||
|
show_help() {
|
||||||
|
cat << EOF
|
||||||
|
Configure a local cluster for use with Functions.
|
||||||
|
|
||||||
|
Usage: $(basename "$0") <options>
|
||||||
|
|
||||||
|
-h, --help Display help
|
||||||
|
-n, --namespace The namespace to use for Functions (default: $DEFAULT_NAMESPACE)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local namespace="$DEFAULT_NAMESPACE"
|
||||||
|
|
||||||
|
local em=$(tput bold)$(tput setaf 2)
|
||||||
|
local me=$(tput sgr0)
|
||||||
|
|
||||||
|
parse_command_line "$@"
|
||||||
|
|
||||||
|
echo "${em}Configuring...${me}"
|
||||||
|
|
||||||
|
namespace
|
||||||
|
network
|
||||||
|
kourier_nodeport
|
||||||
|
default_domain
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
kubectl --namespace kourier-system get service kourier
|
||||||
|
|
||||||
|
echo "${em}DONE${me}"
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_command_line() {
|
||||||
|
while :; do
|
||||||
|
case "${1:-}" in
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
-n|--namespace)
|
||||||
|
if [[ -n "${2:-}" ]]; then
|
||||||
|
namespace="$2"
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
echo "ERROR: '-n|--namespace' cannot be empty." >&2
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace() {
|
||||||
|
echo "${em}① Namespace${me}"
|
||||||
|
kubectl create namespace "$namespace"
|
||||||
|
kubectl label namespace "$namespace" knative-eventing-injection=enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
network() {
|
||||||
|
echo "${em}② Network${me}"
|
||||||
|
echo "Registering Kourier as ingress"
|
||||||
|
echo "Enabling subdomains"
|
||||||
|
cat <<EOF | kubectl apply -f -
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: config-network
|
||||||
|
namespace: knative-serving
|
||||||
|
data:
|
||||||
|
# Use Kourier for the networking layer
|
||||||
|
ingress.class: kourier.ingress.networking.knative.dev
|
||||||
|
|
||||||
|
# If there exists an annotation 'func.subdomain' on the service, use it
|
||||||
|
# instead of the default name.namespace
|
||||||
|
domainTemplate: |-
|
||||||
|
{{if index .Annotations "func.subdomain" -}}
|
||||||
|
{{- index .Annotations "func.subdomain" -}}
|
||||||
|
{{else -}}
|
||||||
|
{{- .Name}}.{{.Namespace -}}
|
||||||
|
{{end -}}
|
||||||
|
.{{.Domain}}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
kourier_nodeport() {
|
||||||
|
echo "${em}③ Nodeport${me}"
|
||||||
|
echo 'Setting Kourier service to type NodePort'
|
||||||
|
# Patch for changing kourier to a NodePort for installations where a
|
||||||
|
# LoadBalancer is not available (for example local Kind clusters)
|
||||||
|
# kubectl patch -n kourier-system services/kourier -p "$(cat configure-kourier-nodeport.yaml)"
|
||||||
|
kubectl patch services/kourier \
|
||||||
|
--namespace kourier-system \
|
||||||
|
--type merge \
|
||||||
|
--patch '{
|
||||||
|
"spec": {
|
||||||
|
"ports": [
|
||||||
|
{
|
||||||
|
"name": "http2",
|
||||||
|
"nodePort": 30080,
|
||||||
|
"port": 80,
|
||||||
|
"protocol": "TCP",
|
||||||
|
"targetPort": 8080
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "https",
|
||||||
|
"nodePort": 30443,
|
||||||
|
"port": 443,
|
||||||
|
"protocol": "TCP",
|
||||||
|
"targetPort": 8443
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "NodePort"
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
default_domain() {
|
||||||
|
echo "${em}④ Default Domains${me}"
|
||||||
|
cat <<EOF | kubectl apply -f -
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: config-domain
|
||||||
|
namespace: knative-serving
|
||||||
|
data:
|
||||||
|
example.com: |
|
||||||
|
selector:
|
||||||
|
func.domain: "example.com"
|
||||||
|
example.org: |
|
||||||
|
selector:
|
||||||
|
func.domain: "example.org"
|
||||||
|
# Default is local only.
|
||||||
|
svc.cluster.local: ""
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Create a local kind cluster with
|
||||||
|
# Knative Serving, and Kourier networking installed.
|
||||||
|
# Suitable for use locally during development.
|
||||||
|
# CI/CD uses the very similar knative-kind action
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local green=$(tput bold)$(tput setaf 2)
|
||||||
|
local red=$(tput bold)$(tput setaf 2)
|
||||||
|
local reset=$(tput sgr0)
|
||||||
|
|
||||||
|
echo "${green}Deleting Cluster, Registry and Network${reset}"
|
||||||
|
kind delete cluster --name "kind"
|
||||||
|
docker stop kind-registry && docker rm kind-registry
|
||||||
|
docker network rm kind
|
||||||
|
echo "${red}NOTE:${reset} The following changes have not been undone:"
|
||||||
|
echo " - Manual etc/hosts entry for kind-registry"
|
||||||
|
echo " - Manual docker config registering kind-registry as insecure"
|
||||||
|
echo " - Downloaded container images were not removed"
|
||||||
|
echo "${green}DONE${reset}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
Loading…
Reference in New Issue