國內搭建k8s環境

下面演示在國內,在虛擬機ubuntu18.04中利用kubeadm,從零搭建一個有1個master的kubernetes環境

一、ubuntu18.04安裝及環境配置

從官網下載ubuntu18.04的鏡像,並使用vmware進行安裝,一路默認配置就可以了,安裝完畢之後進行如下操作。

1. 【非虛擬機不用】設置靜態IP和訪問外網,這樣方便後面使用xshell進行登錄,具體配置可以看 《VMware下如何實現ubuntu的靜態地址設置和外網訪問和ssh連接

2. 修改apt源

vi /etc/apt/sources.list
#內容如下
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

執行如下操作

sudo apt update
sudo apt upgrade

3. 關閉swap

編輯/etc/fstab文件,註釋掉引用swap的行,保存並重啓後輸入sudo swapoff -a即可。

二、軟件安裝

1. docker安裝與配置

sudo apt install docker.io
#配置鏡像加速器,參考:https://yq.aliyun.com/articles/29941

#重啓docker
sudo systemctl daemon-reload
sudo systemctl restart docker

2. 安裝kubeadm、kubelet、kubectl

使用國內的鏡像源

sudo apt-get update && sudo 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  
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

三、k8s鏡像處理

國內是不太容易下載k8s.gcr.io站點的鏡像的, 使用Azure中國鏡像進行之後,利用tag重新打標籤的方式進行鏡像下載困難的處理,腳本如下(代碼來自:https://blog.csdn.net/weixin_30456039/article/details/101436638):

#!/bin/bash
# download k8s 1.15.2 images
# get image-list by 'kubeadm config images list --kubernetes-version=v1.15.2'
# gcr.azk8s.cn/google-containers == k8s.gcr.io
#images=(
#kube-apiserver:v1.15.2
#kube-controller-manager:v1.15.2
#kube-scheduler:v1.15.2
#kube-proxy:v1.15.2
#pause:3.1
#etcd:3.3.10
#coredns:1.3.1
#)
if [ $# -ne 1 ];then
    echo "please user in: ./`basename $0` KUBERNETES-VERSION"
    exit 1
fi
version=$1
 
images=`kubeadm config images list --kubernetes-version=${version} |awk -F'/' '{print $2}'`
 
for imageName in ${images[@]};do
    docker pull gcr.azk8s.cn/google-containers/$imageName
    docker tag  gcr.azk8s.cn/google-containers/$imageName k8s.gcr.io/$imageName
    docker rmi  gcr.azk8s.cn/google-containers/$imageName
done

將上述腳本保存爲pull.sh

chmod +x pull.sh
./pull.sh v1.16.2

四、k8s安裝 

1. 安裝master節點

sudo kubeadm init --apiserver-advertise-address 192.168.13.182  --kubernetes-version=v1.16.2 --pod-network-cidr=10.244.0.0/16

init 常用主要參數:

  • –kubernetes-version: 指定Kubenetes版本,如果不指定該參數,會從google網站下載最新的版本信息。
  • –pod-network-cidr: 指定pod網絡的IP地址範圍,它的值取決於你在下一步選擇的哪個網絡網絡插件,比如我在本文中使用的是 flannel 網絡,需要指定爲10.244.0.0/16。
  • –apiserver-advertise-address: 指定master服務發佈的Ip地址,如果不指定,則會自動檢測網絡接口,通常是內網IP。

安裝完成之後記得保存結果

 

2. 按上述圖片中的提示輸入三個命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3. 安裝網絡插件

此時使用kubectl get nodes可以查看到master節點,但是它的狀態是notReady,需要安裝一個網絡插件,畢竟Pod之間是需要網絡通信的。

這裏我們選擇flannel,其yaml文件:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 

通過yaml文件可以知道需要下載quay.io的鏡像,可以參考:https://www.ilanni.com/?p=14534,根據上面的網址,我們使用下面的腳本下載鏡像

#!/bin/bash
 
images=(
flannel:v0.11.0-amd64
flannel:v0.11.0-arm64
flannel:v0.11.0-arm
flannel:v0.11.0-ppc64le
flannel:v0.11.0-s390x
)
 
for imageName in ${images[@]};do
    docker pull quay.azk8s.cn/coreos/$imageName  
    docker tag  quay.azk8s.cn/coreos/$imageName quay.io/coreos/$imageName  
    docker rmi  quay.azk8s.cn/coreos/$imageName
done

將上面的腳本 文件保存爲pull-quay-io-flannel.sh,執行如下操作

chmod +x pull-quay-io-flannel.sh
./pull-quay-io-flannel.sh

執行如下命令安裝flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

插件安裝完成後,可以通過檢查coredns pod的運行狀態來判斷網絡插件是否正常運行。等待coredns pod的狀態變成Running,就可以繼續添加從節點了。

4. 讓master部署節點:https://www.cnblogs.com/RainingNight/p/using-kubeadm-to-create-a-cluster-1-12.html

如果你只部署了一個master結點的話,直接kubectl apply -f 應用的話,會發現無法部署,如下

# busybox.yaml
apiVersion: v1
kind: Pod
metadata:
  name: first-pod
  labels:
    app: bash
    tir: backend
spec:
  containers:
  - name: bash-container
    image: docker.io/busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
#執行如下命令
kubectl apply -f busybox.yaml
#查看部署情況
kubectl get pod
# 你會發現那個pod一直在pending,查看原因
kubectl get pod/first-pod -o yaml
#查看status字段,可以看到 message: '0/1 nodes are available: 1 node(s) had taints that the pod didn''t tolerate.' 所以了讓我們的master結點可以部署(畢竟是隻有一個結點),我們執行如下操作,去掉master的標籤

kubectl taint nodes --all node-role.kubernetes.io/master- 
#再度執行
kubectl get pod #可以發現已經running了

鏈接

1)解決鏡像下載的網址:https://blog.csdn.net/weixin_30456039/article/details/101436638https://www.ilanni.com/?p=14534

2)主要參考:https://tomoyadeng.github.io/blog/2018/10/12/k8s-in-ubuntu18.04/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章