Skip to content

Instantly share code, notes, and snippets.

@k2levin
Created March 27, 2021 15:08
Show Gist options
  • Save k2levin/62b5b864eeca037f303de1e505976d8d to your computer and use it in GitHub Desktop.
Save k2levin/62b5b864eeca037f303de1e505976d8d to your computer and use it in GitHub Desktop.
snippet using kind for k8s

snippet to setup k8s cluster using Kind

https://github.com/kubernetes-sigs/kind/

  • install kind
curl -Lo ./kind "https://kind.sigs.k8s.io/dl/v0.10.0/kind-$(uname)-amd64"
chmod +x ./kind
mv ./kind /usr/bin/kind
  • install docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo groupadd docker
sudo usermod -aG docker $USER
  • install kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • setup kind cluster and k8s deployments
kind create cluster --config=config.yaml
kubectl apply -f storageclass.yaml
kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml
kubectl apply -f deployment.yaml
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
- role: worker
extraPortMappings:
- containerPort: 30080
hostPort: 30080
listenAddress: "0.0.0.0"
protocol: tcp
- role: worker
extraPortMappings:
- containerPort: 30306
hostPort: 30306
listenAddress: "0.0.0.0"
protocol: tcp
extraMounts:
- hostPath: ./mysql_data
containerPath: /tmp/mysql_data
- role: worker
apiVersion: v1
kind: Service
metadata:
labels:
k8.service: app
name: app
spec:
type: NodePort
ports:
- name: "80"
protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
selector:
k8.service: app
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8.service: app
name: app
spec:
replicas: 2
selector:
matchLabels:
k8.service: app
template:
metadata:
labels:
k8.service: app
spec:
containers:
- image: nginx:alpine
name: app
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
k8.service: db
name: db
spec:
type: NodePort
ports:
- name: "3306"
protocol: TCP
port: 3306
targetPort: 3306
nodePort: 30306
selector:
k8.service: db
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8.service: db
name: db
spec:
selector:
matchLabels:
k8.service: db
template:
metadata:
labels:
k8.service: db
spec:
containers:
- image: mysql:8.0
name: db
args:
- --default-authentication-plugin=mysql_native_password
env:
- name: MYSQL_ROOT_PASSWORD
value: "-P@ssw0rd"
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: db-hostpath0
volumes:
- name: db-hostpath0
persistentVolumeClaim:
claimName: db-pvc
stream {
upstream stream_http {
server 127.0.0.1:80;
}
server {
listen 30080;
proxy_pass stream_http;
}
upstream stream_mysql {
server 127.0.0.1:3306;
}
server {
listen 30306;
proxy_pass stream_mysql;
}
}
apiVersion: v1
kind: PersistentVolume
metadata:
name: db-pv
labels:
type: local
spec:
storageClassName: slow
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /tmp/mysql_data
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: db-pvc
spec:
storageClassName: slow
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/aws-ebs
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp2
iopsPerGB: "10"
fsType: ext4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment