一、概述
由於業務需求,需要安裝版本比較高的k8s,比如:1.20.0
二、環境介紹
操作系統:ubuntu-18.04.6-server-amd64
配置:2核3g
ip地址:192.168.1.12
主機名:k8smaster
操作系統:ubuntu-18.04.6-server-amd64
配置:2核4g
ip地址:192.168.1.13
主機名:k8snode1
基礎環境配置
安裝docker
apt-get install docker.io
如果需要配置爲開機啓動,可執行以下命令
systemcd enable docker
systemcd start docker
配置 Docker 鏡像加速,編輯配置文件
vi /etc/docker/daemon.json
內容如下:
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
重啓 Docker,使配置生效
sudo systemctl daemon-reload sudo systemctl restart docker
修改主機名
比如修改master節點的,注意主機名不要帶有特殊字符。
hostnamectl set-hostname k8smaster
添加hosts文件
192.168.1.12 k8smaster 192.168.1.13 k8snode1
關閉swap
臨時關閉
swapoff -a
永久關閉
修改 /etc/fstab 文件,註釋掉 SWAP 的自動掛載(永久關閉swap,重啓後生效)
# 註釋掉以下帶有swap字段的一行 /dev/mapper/cl-swap swap swap defaults 0 0
三、安裝kubeadm,kubelet,kubectl
添加更新源,修改文件
vi /etc/apt/sources.list
最後一行增加
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
安裝 https 工具以及 k8s
apt-get update && apt-get install -y apt-transport-https curl curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
下載鏡像
由於初始化時,需要連接到google,所以可能無法下載內容。
我們可以通過使用 kubeadm config images list
命令,列舉需要拉取的鏡像。我們來手動通過 Docker 拉取。這個過程比較麻煩,還需要手動修改鏡像名稱。
拉取方法 docker pull {鏡像名稱}
。
Google 訪問不了,不過 DockerHub 已經備份好需要的鏡像。
mirrorgooglecontainers 這個倉庫備份了相應的鏡像。遺憾的是,鏡像不一定都是最新的備份。阿里雲上面的 google_containers 倉庫應該是備份最新的。
新建腳本pullk8s.sh,內容如下:
for i in `kubeadm config images list`; do imageName=${i#k8s.gcr.io/} docker pull registry.aliyuncs.com/google_containers/$imageName docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.aliyuncs.com/google_containers/$imageName done;
執行腳本
bash pullk8s.sh
初始化
請根據實際情況,修改kubernetes-version和apiserver-advertise-address參數。
kubernetes-version是k8s版本,apiserver-advertise-address是k8s master節點ip
kubeadm init --kubernetes-version=1.20.0 --apiserver-advertise-address=192.168.1.12 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.222.0.0/16 --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU
初始化成功後,會輸出一段信息,注意自己保存好。
配置kubectl工具
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
安裝flannel
使用谷歌瀏覽器下載文件,地址如下:
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
將yaml文件上傳到linux,然後執行安裝
kubectl apply -f kube-flannel.yml
設置開機啓動
systemctl enable kubelet
命令補全
apt-get install -y bash-completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc source ~/.bashrc
四、node加入集羣
注意:node節點,只需要安裝docker和kubeadm,kubelet,kubectl即可。
注意主機名已經修改正確,加入節點
kubeadm join 192.168.1.12:6443 --token sx0dph.jthe8rswjpozchsu \ --discovery-token-ca-cert-hash sha256:f5325f7abf26ad375e139e231e587848c3ec41270f7bef2828b8adf428c3bc92
登錄master節點,查看
root@k8smaster:~# kubectl get nodes NAME STATUS ROLES AGE VERSION k8smaster Ready control-plane,master 3h38m v1.20.0 k8snode1 Ready <none> 3h10m v1.20.0
五、使用yaml發佈應用
以flaskapp爲例子
登錄k8smaster執行
flaskapp-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: flaskapp-1 spec: selector: matchLabels: run: flaskapp-1 replicas: 1 template: metadata: labels: run: flaskapp-1 spec: containers: - name: flaskapp-1 image: jcdemo/flaskapp ports: - containerPort: 5000
flaskapp-service.yaml
apiVersion: v1 kind: Service metadata: name: flaskapp-1 labels: run: flaskapp-1 spec: type: NodePort ports: - port: 5000 name: flaskapp-port targetPort: 5000 protocol: TCP nodePort: 30005 selector: run: flaskapp-1
加載yml文件
kubectl apply -f flaskapp-service.yaml
kubectl apply -f flaskapp-deployment.yaml
查看pod狀態
root@k8smaster:~# kubectl get pods NAME READY STATUS RESTARTS AGE flaskapp-1-84fbb4f499-646rw 1/1 Running 2 172m
等待幾分鐘,確保爲Running狀態
訪問頁面
使用master ip+nodeport訪問
http://192.168.1.12:30005/
效果如下:
本文參考鏈接:
https://www.cnblogs.com/bruce1992/p/15849111.html