1. Home
  2. 3rd Party Product
  3. Kubespray
  4. Install Kubespray as small production

Install Kubespray as small production

Requirement

สร้างเครื่อง 3 เครื่องสำหรับเป็น Kubernetes node
สร้างเครื่อง 1 เครื่อง สำหรับเป็น load balancer
สร้างเครื่อง 1 เครื่อง สำหรับเป็น NFS server
สร้างเครื่อง 1 เครื่อง สำหรับเป็น Deployer

Pre-install Step

config firewall ระดับ instance (cloud firewall) ดังนี้
Load Balancer เปิด http & https (80/tcp & 443/tcp) จาก world-wide
NFS server เปิด port สำหรับ nfsv4 (2049/tcp) จาก K8S node
K8S node เปิด In-cluster (allow ทุก connection ระหว่าง node ด้วยกันเอง) และ allow ทุก request จาก Load Balancer

Installation Step

Login ไปยังเครื่อง Deployer

เตรียมเครื่องให้ deployer สามารถ  access ไปยัง node ได้โดยไม่ต้องใช้ password

สร้าง key ที่เครื่อง deployer

ssh-keygen

ssh-copy-id [email protected]

ssh-copy-id [email protected]

ssh-copy-id [email protected]

ลง package pip3

sudo apt update

sudo apt upgrade

sudo apt install -y python3-pip

sudo apt install -y python3-venv

Clone Kubespray จาก git

git clone https://github.com/kubernetes-sigs/kubespray.git

สร้าง virtual environment เพื่อไม่ให้ lib python รบกวนกัน

python3 -m venv virtualenv

source /home/nc-user/virtualenv/bin/activate

เข้าไปยัง directory kubespray และ  install requirement

cd kubespray

pip3 install setuptools

pip3 install -r requirements.txt

copy sample มาสร้าง config ของตนเอง

cp -rfp inventory/sample inventory/mycluster

แก้ไข inventory.ini

vi inventory/mycluster/inventory.ini

[all]
node1 ansible_host=10.148.0.11 ip=10.148.0.11
node2 ansible_host=10.148.0.12 ip=10.148.0.12
node3 ansible_host=10.148.0.13 ip=10.148.0.13

[kube-master]
node1
node2
node3

[etcd]
node1
node2
node3

[kube-node]
node1
node2
node3

[calico-rr]

[k8s-cluster:children]
kube-master
kube-node
calico-rr

ใช้ command ansible ในการ setup kubespray

cd /home/nc-user/kubespray

ansible-playbook -i inventory/mycluster/inventory.ini –user nc-user –become –become-user=root cluster.yml

ไปที่เครื่อง master-node1

download and run script ใน การ install helm

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

bash install-helm.sh

สร้าง file tiller.yml สำหรับ ClusterRoleBindind เพื่อ map role ให้กับ triller

vi tiller.yml

apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system


kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-clusterrolebinding
subjects:
– kind: ServiceAccount
name: tiller
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: “”

สั่ง command kubectl เพื่อสร้าง ClusterRoleBindind

kubectl create -f tiller.yml

สั่ง command helm init เพื่อupgrade triller

helm init –service-account tiller –upgrade

สร้าง nginx-ingress สำหรับรับ traffic

git clone https://github.com/nginxinc/kubernetes-ingress/

git checkout v1.6.2

cd kubernetes-ingress/deployments

สร้าง namespace nginx-ingress และสร้าง service account สำหรับ nginx-ingress

kubectl apply -f common/ns-and-sa.yaml

สร้าง ClusterRoleBindind เพื่อ map role ให้กับ service account ของ nginx-ingress

kubectl apply -f rbac/rbac.yaml

สร้าง config map เพื่อ map file nginx.conf

kubectl apply -f common/nginx-config.yaml

สร้าง daemonset เพื่อรับ traffic ตรงจากเครื่อง host

kubectl apply -f daemon-set/nginx-ingress.yaml

สร้าง Load Balance

Login ไปยังเครื่อง Load Balancer
Install nginx

sudo apt update
sudo apt upgrade
sudo apt install -y nginx

config nginx ให้มายัง K8S cluster และ port ตาม Ingress

sudo vi /etc/nginx/sites-enabled/default

upstream k8s {
server 10.148.0.11:32393;
server 10.148.0.12:32393;
server 10.148.0.13:32393;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://k8s;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}

sudo systemctl reload nginx

สร้าง NFS Server

Login ไปยังเครื่อง NFS server

sudo apt update
sudo apt upgrade
sudo apt install -y nfs-server

เตรียม disk ที่จะใช้เก็บ data และเตรียม path ให้พร้อม
config nfs export ให้เครื่องใน private subnet สามารถ access read-write ได้ และ restart service

sudo vi /etc/exports

/     exports 10.148.0.0/24    (rw,sync,no_subtree_check,no_root_squash)

sudo systemctl restart nfs-server

สร้าง deployment และ service สำหรับ run ทดสอบ

vi hello-kubernetes.yml

apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes
namespace: dev
spec:
type: ClusterIP
ports:
– port: 80
targetPort: 8080
selector:
app: hello-kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes
template:
metadata:
labels:
app: hello-kubernetes
spec:
containers:
– name: hello-kubernetes
image: paulbouwer/hello-kubernetes:1.7
ports:
– containerPort: 8080

kubectl apply -f hello-kubernetes.yml

สร้าง ingress สำหรับ forword traffic ไปที่ deployment hello-kubernetes

vi hello-kubernetes-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
namespace: dev
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
– host: hello-kubernetes.com
http:
paths:
– backend:
serviceName: hello-kubernetes
servicePort: 80

kubectl apply -f hello-kubernetes-ingress.yaml

ทดสอบ โดยการ map host ที่เครื่อง

<external ip> hello-kubernetes.com

Was this article helpful?

Related Articles