您好,登錄后才能下訂單哦!
安裝配置運行Kubernetes的主節點master,其中包括了etcd的數據庫,即etcd沒有和主節點分開,使用于奇數個主節點安裝。
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# yum install kubeadm kubelet kubectl
設置kubectl自啟動
# systemctl enable kubelet
初始化命令‘kubeadm’可以使用參數傳遞和yaml配置文件。
初始化的過程會首先拉取需要的容器鏡像,而鏡像又存儲在k8s.gcr.io上,需要科學上網,因此可先準備好鏡像再執行初始化命令。
#kubeadm config images list
# kubeadm config images pull
如果沒有改倉庫則默認從k8s.gcr.io去獲取,建議能夠科學訪問的環境下直接使用,也可以采用鏡像站點來拉取。
# vim k8s-pull-images.sh
#!/bin/bash
REGISTRY=gcr.azk8s.cn/google-containers
images=(
kube-apiserver:v1.16.3
kube-controller-manager:v1.16.3
kube-scheduler:v1.16.3
kube-proxy:v1.16.3
pause:3.1
etcd:3.3.15-0
coredns:1.6.2
)
for imageName in ${images[@]} ; do
docker pull ${REGISTRY}/$imageName
docker tag ${REGISTRY}/$imageName k8s.gcr.io/$imageName
docker rmi ${REGISTRY}/$imageName
done
說明: REGISTRY還可以使用dockerhub中的鏡像,具體修改:REGISTRY=mirrorgooglecontainers(注意:只有amd64的鏡像)。
其中組件包列表可以通過命令"kubeadm config images list"獲取。
# chmod +x k8s-pull-images.sh
# ./k8s-pull-images.sh
上述腳本保存執行后可以通過"docker image list"查看結果。
從Docker registry v2.3和Docker 1.10開始,Docker通過支持新的image Media 類型 manifest list 實現了Multi architecture Docker鏡像功能,即一個image manifest list包含已經存在鏡像的manifest對象的平臺特性(CPU arch和OS類型)特征,在具體來講就是拉取鏡像的時候會根據現有的主機架構拉取相應的平臺架構的鏡像,因此強烈建議采用模擬器運行虛擬機的方式拉取該平臺的鏡像,如kvm+qemu+qemu-system-aarch74來運行arm64架構的虛擬機。
如果沒有采用虛擬機的方式拉取鏡像,比如在amd64平臺下拉取arm64的鏡像,則需要查看倉庫中的具體標簽,因為倉庫有多個比如docker.io、quey.io,所以沒有統一的規則,下面總結了本人需要用到的標簽
離線環境中部署k8s需要先在在線環境中下載導出,然后在傳入離線環境中導入
命令和格式
docker save -o <path for generated tar file> <image name> [<image2 name>, ...]
舉例(單個打包)
docker save -o kube-apiserver-1.16.3.tar k8s.gcr.io/kube-apiserver:v1.16.3
舉例(批量打包)
docker save -o k8s-master-1.16.3.tar\
k8s.gcr.io/kube-apiserver:v1.16.3\
k8s.gcr.io/kube-controller-manager:v1.16.3\
k8s.gcr.io/kube-scheduler:v1.16.3\
k8s.gcr.io/kube-proxy:v1.16.3\
k8s.gcr.io/pause:3.1\
k8s.gcr.io/etcd:3.3.15-0\
k8s.gcr.io/coredns:1.6.2
單個打包可以應對多種架構的部署(主要時etcd從master分離)
命令和格式
docker -load -i <path for generated tar file>
舉例
加載初始化所需要的鏡像
docker load -i k8s-master-1.16.3.tar
或
docker load -i kube-apiserver-1.16.3.tar
docker load -i kube-controller-1.16.3.tar
docker load -i kube-scheduler-1.16.3.tar
docker load -i kube-proxy-1.16.3.tar
docker load -i pause-3.3.tar
docker load -i etcd-3.3.15-0.tar
docker load -i coredns-1.6.2.tar
# kubeadm init --kubernetes-version="1.16.3" --pod-network-cidr="10.244.0.0/16" --service-cidr="10.96.0.0/12" --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU --image-reporitory "gcr.azk8s.cn" --dry-run
其中
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
該命令執行時,會自動去k8s.gcr.io拉取需要的鏡像文件,執行成功執行后會顯示初始化結果
...
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.122.10:6443 --token kt9uzn.793zkkepgvup3jg8 \
--discovery-token-ca-cert-hash sha256:1b00c8c653c5573ff89c134bd1e62a54f3640813b0e26b79f387fddb402b0b48
獲取配置文件
kubeadm config print init-defaults > kubeadm-init-config.yaml
修改配置文件(檢查以下部分)
...
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
...
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
...
kind: ClusterConfiguration
kubernetesVersion: v1.16.2
networking:
dnsDomain: cluster.test
serviceSubnet: 10.96.0.0/16
podSubnet: 10.244.0.0/16
...
使用命令進行初始化
kubeadm init -f kubeadm-init-config.yaml
離線環境的配置文件初始化根在線環境一樣,但需要先導入鏡像文件。
接下來按照上述初始化結果的提示后續還需要為當前master節點的用戶準備kubectl環境和安裝網絡
$ mkdir -p ~/.kube
$ cp /etc/kubernetes/admin.conf ~/.kube/config
語法:"kubectl apply -f [podnetwork].yaml"
此處我們使用的flannel(由coreos研發)。在github的頁面上有具體的安裝說明,地址https://github.com/coreos/flannel。
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果是離線安裝可以先下載打包flannel鏡像及kube-flannel.yml文件,然后使用kubectl安裝。具體如下:
下載flannel
docker pull query.io/coreos/flannel
打包flannel并保存到本地
docker save query.io/coreos/flannel -o <your_save_path>/flannel-0.11.0.tar
裝載flannel鏡像
docker load -i <your_save_path>/flannel-0.11.0.tar
下載kube-flannel.yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安裝flannel
kubectl apply -f kube-flannel.yml
而后可以使用命令"kubectl get pods -n kube-system"進行查看。
參考:
可以看到,在默認的kubeadm-config.yaml文件中只有InitConfiguration、ClusterConfiguration 兩部分。我們可以通過如下操作生成另外兩部分的示例文件:
# 生成KubeletConfiguration示例文件
kubeadm config print init-defaults --component-configs KubeletConfiguration
# 生成KubeProxyConfiguration示例文件
kubeadm config print init-defaults --component-configs KubeProxyConfiguration
[WARNING SystemVerification]: this docker version is not on the list of validated version: 19.01.1. Latest validated version: 18.06
以上版本根據自身環境的報告版本有所不同,可以參看kubernetes在git倉庫中的changelog文件來確定支持的docker本版,然后根據命令
# yum list docker-ce.x86_64 --showduplicates | sort -r
獲取版本列表,然后選取特定的版本進行安裝
sudo yum -y install docker-ce-[VERSION]
[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
解決:執行自啟動命令'systemctl enable kubelet.service'
[ERROR Swap]: running with swap on is not enabled, please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with '--ignore-preflight-errors=...'
解決:可以在kubeadm的命令末尾加上參數'--ignore-preflight-errors=Swap'。
kubeadm config view
使用kubeadm初始化的集群,出于安全考慮Pod不會被調度到Master Node上,也就是說Master Node不參與工作負載。這是因為當前的master節點(比如名字叫master0)被打上了node-role.kubernetes.io/master:NoSchedule的污點:
$ sudo kubectl describe node master0 | grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
因為這里搭建的是測試環境,或者其它原因需要去掉這個污點使master0參與工作負載:
$ sudo kubectl taint nodes master0 node-role.kubernetes.io/master-
node "master0" untainted
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。