Vagrant + Virtualbox 建置 k8s 筆記
Vagrant Build Image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
Vagrant.configure("2") do |config|
# 設定 vm image, 版本,hostname,名稱
config.vm.box = "bento/ubuntu-18.04"
config.vm.box_version ='201912.14.0'
config.vm.hostname = 'k8s-dev'
config.vm.define vm_name = 'k8s'
# provision (Shell Script)
config.vm.provision "shell", privileged: false, inline: <<-SHELL
set -e -x -u
export DEBIAN_FRONTEND=noninteractive
#change the source.list
sudo apt-get update
sudo apt-get install -y vim git cmake build-essential tcpdump tig jq socat bash-completion
# Install Docker
export DOCKER_VERSION="5:19.03.5~3-0~ubuntu-bionic"
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce=${DOCKER_VERSION}
sudo usermod -aG docker $USER
#Disable swap
#https://github.com/kubernetes/kubernetes/issues/53533
sudo swapoff -a && sudo sysctl -w vm.swappiness=0
sudo sed '/vagrant--vg-swap/d' -i /etc/fstab
git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
bash ~/.bash_it/install.sh -s
SHELL
# 設定IP
config.vm.network :private_network, ip: "172.17.8.111"
#設定硬體
config.vm.provider :virtualbox do |v|
v.customize ["modifyvm", :id, "--cpus", 2]
v.customize ["modifyvm", :id, "--memory", 4096]
v.customize ['modifyvm', :id, '--nicpromisc1', 'allow-all']
end
end
|
安裝 Kubeadm Kubectl Kubelet
1
2
3
4
5
6
7
8
|
export KUBE_VERSION="1.17.0"
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubeadm=${KUBE_VERSION}-00 kubelet=${KUBE_VERSION}-00 kubectl=${KUBE_VERSION}-00
|
Service
初始化 Kubernetes Cluster
CNI 使用fannel
1
|
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
|
1
2
3
4
|
mkdir -p $HOME/.kube
# 設定檔(TOKEN,驗證)
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
1
2
3
|
# 多節點加入可以使用
kubeadm join 10.0.2.15:6443 --token h4927u.xc4i5epds3aw0kbs \
--discovery-token-ca-cert-hash sha256:92787d0bba51786f879304229b07e2a58878bc775cbf12a6f9bf4e95a8794f97
|
coredns pending 原因是因為 CNI 還沒安裝,安裝Flannel (CNI)就會自動執行。
/etc/kubernetes/manifests kubeadmin 安裝玩會放對應設定到這個路徑,啟動 kubelet會參照這邊設定。
kubeadm(快速部屬工具)
Static /Dynamic 兩種安裝方式
1
|
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
|
設定檔
1
|
kubectl -n kube-system get pods
|
取得資訊
Summary
幫 Bash 設定 kubectl 自動補齊
1
|
source <(kubectl completion bash)
|
1
|
kubectl get $resource_type $name
|
1
|
kubectl -n kube-system get pods
|
wide
describe
檢查常用這個指令
1
|
kubectl -n kube-system describe pods xxxx
|
Cluster Info
1
2
3
4
5
6
7
8
|
kubectl version
# 叢集資訊
kubectl cluster-info
kubectl top node
kubectl top pod
kubectl api-versions
|
Interacting with Container
kubectl logs $name
kubectl -n kube-system -f logs $name
複製檔案
1
2
3
4
5
6
7
8
9
|
kubectl -n kube-system cp xxx node:ooo
kubectl -n kube-system exec _pod_name_ ls
kubectl -n kube-system exec _pod_name_ ip addr
kubectl -n kube-system exec -it _pod_name_ sh
|
port-forward
1
|
sudo kubectl -n kube-system port-forward pod/coredns-xxxx 53:53
|
vagrant snapshot
每次 vagrant destroy 真的要花滿多時間,之前跟朋友聊到 snapshot(快照)回復VM會比較快,檔案也不會吃很多。我之前沒這麼使用過,今天花點時間測試。
大量指令參照Vagrant Boxes - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天這篇文章。
更多操作可以看Vagrant 學習筆記 - VagrantPi Blog
這邊注意 vagrant destroy
會連帶刪除 snapshot
這邊注意 vagrant destroy
會連帶刪除 snapshot
這邊注意 vagrant destroy
會連帶刪除 snapshot
vagrant snapshot
我對 snapshot 很陌生,但沒想到使用上非常方便。
list
顯示有哪些 snapshot
save
儲存當下 vm snapshot。
1
|
vagrant snapshot save k8s(這邊是放 snapshot 名稱)
|
restore
回原 vm snapshot。
1
|
vagrant snapshot restore k8s(snapshot name)
|
delete
刪除 vm snapshot。
1
|
vagrant snapshot delete k8s(snapshot name)
|
push,pop
這邊跟 Git stash push/pop 很像,但我目前想不到什麼時候會用到這個,好處不需要想名稱,哈哈。
注意這邊不會影響到vagrant snapshot save
指令新增的 snapshot。
vagrant port-forward
Vagrant forward a range of ports - Server Fault
Forwarded Ports - Networking | Vagrant by HashiCorp
備份
wordpress - Correct way to back-up and restore vagrant box + Variable VVV - Stack Overflow
使用 vagrant package 備份指令打包 VirtualBox 環境 - TerryL