文章目錄
- 一、安裝kubeadm、kubelet和kubectl
- (1)添加kubernets apt源公鑰檔案
- (2)加入kubernetes的官方源
- (3)安裝工具
- 二、核心元件鏡像下載下傳
- 1. 先檢視kubeadm版本
- 2. 再根據檢視其所需鏡像
- 3. 拉取`K8S` 的包并打 tag(标簽)
- 4. 初始化
- 三、驗證master節點的引導結果
- 四、配置 kubectl
- 五、安裝叢集網絡(安裝 Pod 網絡)
- 六、驗證
- 七、參考資料
一、安裝kubeadm、kubelet和kubectl
(1)添加kubernets apt源公鑰檔案
有兩種方法:
-
直接執行下面指令(需要科學上網)
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add-
-
(無需科學上網)
先:
wget https://raw.githubusercontent.com/EagleChen/kubernetes_init/master/kube_apt_key.gpg
再:
cat kube_apt_key.gpg | apt-key add -
(2)加入kubernetes的官方源
在該檔案中,加入kubernetes的官方源
有兩種方法:
-
直接操作
vi /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
可不可以,看包更新是否成功
更新本地包
apt-get update
-
使用鏡像
echo "deb [arch=amd64] https://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list
更新本地包
apt-get update
- 使用 aliyun 源
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
(3)安裝工具
apt-get install -y --allow-unauthenticated kubelet kubeadm kubectl
--allow-unauthenticated
可以試試不加。
檢視kuberadm 的目前版本
kubeadm version
檢視kubectl 的目前版本
kubectl version
檢視kubelet目前狀态
systemctl status kubelet
二、核心元件鏡像下載下傳
下載下傳方式:
- kubeadm預設從k8s.gcr.io(老版本:gcr.io/google_containers)上下載下傳核心元件鏡像
- K8s 1.8之前可以通過KUBE_REPO_PREFIX 指定其他k8s鏡像倉庫字首
- 手工将鏡像下載下傳到本地主機
采用第三種(手工下載下傳鏡像)
1. 先檢視kubeadm版本
kubeadm version
2. 再根據檢視其所需鏡像
kubeadm config images list --kubernetes-version v1.12.3
3. 拉取 K8S
的包并打 tag(标簽)
K8S
拉取鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.2.24
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.2
打标簽
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.12.3 k8s.gcr.io/kube-scheduler:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.12.3 k8s.gcr.io/kube-controller-manager:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.12.3 k8s.gcr.io/kube-apiserver:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.12.3 k8s.gcr.io/kube-proxy:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.2.24 k8s.gcr.io/etcd:3.2.24
可以删除多餘标簽
docker rmi $(docker images | grep "^registry.cn-hangzhou.aliyuncs.com")
4. 初始化
kubeadm init --apiserver-advertise-address 10.0.2.15 --pod-network-cidr=192.168.16.0/20
--apiserver-advertise-address
指明用 Master 的哪個 interface 與 Cluster 的其他節點通信。
--pod-network-cidr=
指定 Pod 網絡的範圍。 Kubernetes 支援多種網絡方案,而且不同網絡方案對 --pod-network-cidr 有自己的要求
關閉Swap
vi /etc/fstab
把最後的swap分區注釋掉
然後重新開機此節點
reboot now
kubeadm join 10.0.2.15:6443 --token r6yz3v.c35eyym0a7dpgz86 --discovery-token-ca-cert-hash sha256:93d721518f5a4d42a6df0bd5cbcfdbe9ed2f7935cf0efaaace241d10d5cf61f6
三、驗證master節點的引導結果
-
設定環境變量
export KUBECONFIG=/etc/kubernetes/admin.conf
檢視master 運作情況
kubectl get pods -n kube-system -o wide
四、配置 kubectl
推薦用 Linux 普通使用者執行 kubectl (root 會有一些問題)
為 donald 使用者配置 kubectl:(donald 是 我這邊的使用者)
su - donald
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 啟動 kubectl 自動補全功能
echo "source < (kubectl completion bash)" >> ~/.bashrc
五、安裝叢集網絡(安裝 Pod 網絡)
這裡選擇安裝 Weave Net
-
直接安裝(可能會出錯)
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
-
間接
curl -L "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" > weave.yaml
vi weave.yaml
添加環境變量
- name : IPALLOC_RANGE
value: 192.168.16.0/20
kubectl apply -f weave.yaml
六、驗證
檢視master 運作情況
kubectl get pods -n kube-system -o wide
有個疑問?
為嘛我這沒有 kube-dns呢?
Kubernetes 1.11已經使用coredns替換了kube-dns
七、參考資料
- 每天5分鐘玩轉kubernetes
- http://morecoder.com/article/1133743.html
- https://ieevee.com/tech/2018/09/01/kubeadm.html#增加kubernetes-aliyun鏡像源
- https://kubethink.com/posts/create-an-on-premises-cluster-in-china-v1-12/