centos安裝k8s

本次安裝一個master節點和兩個node節點

k8s安裝最低要求配置
master節點:2核2G
node1節點:2核4G
node2節點:2核4G

對內rpc通訊(gRPC) 對外restfulApi

1. 安裝Docker【master 和node節點都安裝】

Kubernetes默認CRI(容器運行時)爲Docker,因此需要先安裝Docker。這裏使用指定版本安裝

命令如下:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version

1.1 修改hostname

我們在安裝之前給每個節點都修改hostname,這個名字會作爲k8s的節點名。

  • 修改命令
hostname node1
  • 查看命令
hostname

如果這時候不修改後期修改nodename很麻煩,還可能導致coreDNS一直處於創建中的錯誤,如果遇到這種情況參考

修改鏡像地址

2. 所有機器安裝 kubernetes

使用阿里雲鏡像站的源,提供的安裝方法,阿里雲的鏡像站網址:https://developer.aliyun.com/mirror/kubernetes
這裏我們去掉啓動命令systemctl start kubelet,只設置開機啓動,改變後的代碼是:

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
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet

3. 先初始化master節點的 kubeadm

  • 參數解釋

    參數 含義
    apiserver-advertise-address master節點的內網ip
    image-repository 鏡像地址
    service-cidr service網絡的IP地址段,負載均衡的虛擬ip
    pod-network-cidr 容器使用的ip地址,分配到每個node上
  • 命令

    kubeadm init \
    --apiserver-advertise-address=172.17.32.52 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.17.3 \
    --service-cidr=10.1.0.0/16 \
    --pod-network-cidr=10.244.0.0/16
    

在這裏插入圖片描述
執行命令成功之後給出了兩個重要信息

  • 第一個讓我們執行如下命令拷貝文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 第二個
    node節點加入到master節點網絡的命令,我們要記住這個信息我做了替換,各位要根據自己機器返回的信息複製
kubeadm join 172.17.32.XX:6443 --token g5kkqm.za70x0cdl5w8pnv3 \
    --discovery-token-ca-cert-hash sha256:a0c98a328eda69a0b01e08503c7c73febdxxxxxxxd9d944528fa809aea7fb853

4. 通過命令查看是否初始化成功

kubectl get node

這時候你會發現初始化是失敗的,因我pod網絡環境不通。

5. 安裝Pod網絡CNI插件

沒有安裝網絡插件的節點是NotReady狀態,安裝好網絡插件之後節點才能變成Ready狀態

CNI插件有四種可選Flannel,Calico,Canal,Weave,本次我們使用Flanner,網絡插件的作用是讓所有節點都接入到虛擬的局域網絡中

需要兩個文件kube-fannel-rbac.ymlkube-flannel.yml,這兩個文件可用的下載地址太難找,我放到github上一份

github地址

  • 下載後執行如下命令安裝:
    kubectl apply -f kube-fannel-rbac.yml
    kubectl apply -f kube-flannel.yml
    

安裝後我們看一下node節點狀態

kubectl get node

在這裏插入圖片描述

kubectl get pods -n kube-system

在這裏插入圖片描述

6. 【非必須】遇到問題,重置kubeadm

端口占用,忘記token,之前的設置錯誤等情況下,我們可能需要重置kubeadm,重置意味着“ kubeadm init”或“ kubeadm join”對此主機所做的更改將被還原

使用命令如下命令進行重置:

# 重置kubeadm
kubeadm reset
# 刪除之前複製的文件
rm -rf $HOME/.kube
  • 重置之後
  1. 如果是master節點按照步驟 3 重新初始化 kubeadm
  2. 如果是node節點,按照步驟7 重新添加節點

7. 添加node節點

  1. 在node節點執行,master節點初始化成功後的命令2,如果你沒記住第二條命令,可以通過下面的方式重新生成token
kubeadm token create --print-join-command
  1. 執行成功之後記得把master節點$HOME/.kube```目錄的config文件添加到node節點`$HOME/.kube中,這樣node節點才能使用kubectl命令

可以通過命令在node節點下載

# 創建目錄
mkdir $HOME/.kube
# nodeip 填寫node節點的ip地址
scp root@masterip:/root/.kube/config /root/.kube/config

在node節點下執行如下命令,添加可執行權限

sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果你添加node節點失敗了,按照第6步重置node節點

8. 【node】 安裝Pod網絡插件

  • 讓node節點工作正常
    剛剛添加的node節點,是NotReady狀態
    在這裏插入圖片描述
    我們需要給node節點安裝網絡插件才能讓他工作正常。
    參照步驟 5

至此k8s安裝完畢


9. 測試

在Kubernetes集羣中創建一個pod,驗證是否正常運行,我們可以在master節點中執行命令,master節點會幫我們把所操作的任務調度到node節點執行。

# 創建 部署任務nginx 名字nginx ,80端口,1個node運行
kubectl run nginx --image=nginx --port=80 --replicas=1
# 創建service 讓應用能被外部訪問
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看啓動情況
kubectl get pod,svc
# 查看啓動情況--詳細(能看出部署在了哪個節點上)
kubectl get pod,svc	 -o wide

在這裏插入圖片描述
能看出部署在了node1節點上,映射的端口是32725
我們可以訪問一下看看是否能請求成功
http://node1ip:32725
http://node2ip:32725

# ----------------------------------------
# 查看所有的pod
kubectl get pods --all-namespaces
kubectl get pods,svc --all-namespaces
kubectl get pods,svc -o wide --all-namespaces
# 查看所有service
kubectl get service --all-namespaces
# 通過 -n指定namespaces
kubectl get service  -n kube-system
# 查看(部署任務)的情況是否成功等
kubectl get deployment --all-namespaces
# 查看所有pod部署在哪裏
kubectl get pod --all-namespaces -o wide

訪問一下:

卸載docker(非必須)

# 查詢安裝列表
yum list installed | grep docker
# 卸載
yum remove docker-ce.x86_64 -y
# 刪除鏡像/容器等
rm -rf /var/lib/docker

常用命令

https://www.cnblogs.com/klvchen/archive/2018/09/04/9585746.html

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