kubeadm安裝kubernetes kubeadm 是官方社區推出的一個用於快速部署 kubernetes 集群的工具。 這個工具能通過兩條指令完成一個 kubernetes 集群的部署: $ kubeadm init 創建一個master節點 $ kubeadm join 將一個 Node 節 ...
kubeadm安裝kubernetes
kubeadm 是官方社區推出的一個用於快速部署 kubernetes 集群的工具。 這個工具能通過兩條指令完成一個 kubernetes 集群的部署:
$ kubeadm init 創建一個master節點
$ kubeadm join 將一個 Node 節點加入到當前集群中
試驗背景
在學習k8s搭建中,網上大部分教程都是用虛擬機做集群,只有極少數是使用伺服器搭建教程,用雲伺服器的更少。
試驗環境
這裡準備了三台伺服器進行測試
110.42.149.60 master 阿裡雲 2H4G CentOS7.6
42.193.254.253 node1 阿裡雲 2H4G CentOS7.6
69.165.74.251 node2 阿裡雲 2H4G CentOS7.6
是乾凈的系統剛開通的環境
安裝集群版本 1.23.1
1 前置
1 所有節點上安裝 docker kubeadman kubelet、kubectl 而且這三個版本要統一
docker 運行時容器 kubeadman 快速安裝k8s的工具
kubectl 命令行操作節點 kubelet node節點的代理 來進行幹活創建pod 管理網路
2 修改主機名 hosts配置 master節點 就用master node節點 就用node
hostnamectl 檢測主機名
vim /etc/hosts
本機內網ip的名字改為master/node
3 關於防火牆如果使用的雲伺服器就不用管他
2 安裝 前置軟體
docker
touch docker.sh
#!/bin/bash
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mkdir -p /etc/docker && touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<END
{
"registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
END
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
chmod +x docker.yml && ./docker.yml
kubeadman kubelet、kubectl
kubeadman kubelet kubectl 指定版本 最好版本統一和kubernetes的版本統一
1 添加yum 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2 安裝
yum install -y kubelet-1.23.1-0 kubeadm-1.23.1-0 kubectl-1.23.1-0
3 查看是否安裝成功
kubectl version
kubelet --version
kubeadm version
4 設置開機自啟
systemctl restart kubelet
3 master主節點
1 修改hosts文件
這裡的ip 都要可以ping通 最好用這個內網ip 要和etho的那個保持一致
vim /etc/hosts
110.42.149.60 master
42.193.254.253 node
169.165.74.251 node
2 下載鏡像
如果網路不好 下載鏡像可能就下載不下來,提前把鏡像下載下來
編寫一個腳本文件 自己先下載
vim master_images.sh
#!/bin/bash
images=(
kube-apiserver:v1.17.3
kube-proxy:v1.17.3
kube-controller-manager:v1.17.3
kube-scheduler:v1.17.3
coredns:1.6.5
etcd:3.4.3-0
pause:3.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
done
chmod 700 master_images.sh 賦予許可權
./master_images.sh 開始執行
下載好的鏡像
3 開始初始化master節點
kubeadm init \
--apiserver-advertise-address=120.77.82.244 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1-0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
kubeadm init \ 設置主節點 的ip就是你的公網ip需要寫的hosts文件里
--kubernetes-version=1.23.1 指定k8s的版本
--apiserver-advertise-address=自己的ip 因為k8s的所有操作命令都要經過 apiserver 並設置主節點的地址
如果是使用雲伺服器 這個參數就去掉
--kubernetes-version 指定版本
--image-repository 預設是從k8s.io 現在改成阿裡雲的
service-cidr=10.96.0.0/16 \ 對不同節點 pod 之間網路的訪問 ,集群內部虛擬網路,Pod統一訪問入口
--pod-network-cidr=10.244.0.0/1 所在的ip pod和 pod 之間 與下麵部署的CNI網路組件yaml中保持一致
4 使用阿裡雲搭建k8s時,在主節點執行kubeadm init時候卡在
Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0
這是因為kubeadm init 指定了"--apiserver-advertise-address"為公網ip,但是阿裡雲的機器是vpc網路,使用ifconfig時候,可以看到網卡上顯示的是內網ip,並沒有公網ip,這就會導致etcd無法啟動,etcd 啟動不了 kubelet也就啟動不了 解決辦法為去掉--apiserver-advertise-address參數。
如果初始化失敗
echo "1" > /proc/sys/net/ipv4/ip_forward
nmcli c reload
https://www.cnblogs.com/fufengyuan/p/16382182.html
5 初始化成功
6 跟著步驟進行操作 需要先複製 最後一行的 kubeadm的join 這是別的節點加入你的集群的token 有效時間2h
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
vim /etc/profile
export KUBECONFIG="/etc/kubernetes/admin.conf"
source /etc/profile
7 如果忘記token了,在主節點使用kubeadm token list命令查看。如果token過期了
8 K8s集群創建的時候,在主節點使用kubeadm init命令,如果第一次失敗了,再次執行此命令發現提示埠已占用,文件已存在,怎麼辦?使用kubeadm reset 命令清空,然後重新init
9 設置網路插件
用fanl
kubectl apply -f \ https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2 如果fanl下載不了
3 用手動方式進行下載
4 配置fanl
kubectl apply -f kube-flannel.yml
如果此時報錯
The connection to the server localhost:8080 was refused - did you specify the right host or port?
解決方法
具體根據情況,此處記錄linux設置該環境變數
方式一:編輯文件設置
vim /etc/profile
在底部增加新的環境變數 export KUBECONFIG=/etc/kubernetes/admin.conf
方式二:直接追加文件內容
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
在次運行 kubectl apply -f kube-flannel.yml
4 node 節點
1 node節點加入 master節點
這是我自己的tokn 你要加入你自己的就是之前生成的tokn
kubeadm join 120.78.214.226:6443 --token fdw4nd.e1vakp1bxzut6gyk \--discovery-token-ca-cert-hash sha256:9b4f9c9c1c94dd77a1d331ddd19b80e10e4a25c5f439922b7aac9e9bf2949cee
加入成功
2 如果token過期了 需要自己在master節點上重新生成一個
1.通過下麵的命令可以創建一個不過期的token
# kubeadm token create --ttl 0
p4rynu.uj4jaxnzk2s0y9vi #這個值就是Token
把這個tokn進行替換即可
2.查看可用的token列表
# kubeadm token list
TOKEN TTL EXPIRES USAGES
檢測是否加入集群成功
3 如果我想在node節點上操作k8s該怎麼操作
如果直接使用kubectl 會報錯
出現這個問題的原因是kubectl命令需要使用kubernetes-admin的身份來運行,在“kubeadm int”啟動集群的步驟中就生成了“/etc/kubernetes/admin.conf”。
因此,解決方法如下,將主節點中的【/etc/kubernetes/admin.conf】文件拷貝到工作節點相同目錄下:
用ssh登錄或者用xftp 進行文件傳輸
然後分別在工作節點上配置環境變數:
#設置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
刷新環境變數 source/etc/profile
然後輸入密碼即可
任意一臺機器只要安裝了kubelet 都可以 按照上述操作即可進行遠程操控我的k8s集群
5 遠程連接
win上遠程操作kubernetes集群
1、在Windows上安裝kubectl
打開CMD工具,並創建kubectl文件夾,進入創建的文件夾中 在C:\Program Files目錄下創建Kubectl目錄,併進入Kubectl目錄
用curl命令安裝kubectl 執行命名安裝kubectl 這裡安裝的是1.19.0,如果要安裝其他版本只需在url中修改版本號即可
curl -LO "https://dl.k8s.io/release/v1.19.0/bin/windows/amd64/kubectl.exe"
2、下載K8S集群的配置文件
聯接K8S集群主節點,找到$HOME/.kube/config文件並下載 連接master節點,進入.kube目錄找到config文件,並下載到本地
cd $HOME/.kube/
在本地win系統C:\Users\XXX目錄下創建.kube文件夾
將步驟(1)下載的config文件拷貝到步驟(2)創建的.kube文件夾中
3、配置環境變數
將kubectl所在目錄添加到win系統環境變數中
說明: Windows 版的 Docker Desktop 將其自帶版本的 kubectl 添加到 PATH。 如果你之前安裝過 Docker Desktop,可能需要把此 PATH 條目置於 Docker Desktop 安裝的條目之前, 或者直接刪掉 Docker Desktop 的 kubectl。
4、驗證 kubectl 配置
執行下列命令查看結果
kubectl cluster-info
如果命令 kubectl cluster-info 返回了 url,但你還不能訪問集群,那可以用以下命令來檢查配置是否妥當
kubectl cluster-info dump
執行kubectl get nodes查看結果