Kubernetes系列(三) - 通過Kubeadm部署kubernetes


1. Kubeadm簡介

kubeadm是k8s官方提供的,用於新入門人員快速部署一套kubernetes集群的一種簡單的方法

點擊進入官方文檔鏈接

2. 本次操作的機器配置

  • 兩台1核2G的阿里雲
    • centos 7.6
    • 內網互通

配置遠低於官方的要求,但是用於學習用途足矣

3. 部署步驟

  • 以下不做特殊說明默認所有機子都執行

3.1 准備工作

# 更新系統和軟件包
yum update

# 設置主機名(master node 名字分開)
hostnamectl set-hostname k8s-master

# 同步時間
systemctl restart chronyd

# 添加host
# 以下ip是兩台機子的內網ip
cat >> /etc/hosts <<EOF
172.19.227.80 k8s-master
172.19.138.68 k8s-node01
EOF

# 設置兩台機子間無密碼訪問
ssh-keygen -t rsa
ssh-copy-id root@k8s-master
ssh-copy-id root@k8s-node01

# 關閉防火牆和iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl stop iptables.service
systemctl disable iptables.service

# 關閉SELinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 關閉swap
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 

3.2 安裝docker

# master執行以下轉到repo目錄
cd /etc/yum.repos.d/

# master執行下載docker阿里雲鏡像
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# master同步到其他服務器
scp docker-ce.repo k8s-node01:/etc/yum.repos.d/

# 安裝docker(各個都要裝)
yum -y install docker-ce

# 修改配置
nano /usr/lib/systemd/system/docker.service

# master增加一行如下
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

# 配置阿里雲鏡像加速
sudo mkdir -p /etc/docker

# 注意這里的鏈接要換成自己賬號的鏡像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF

# 重啟docker
systemctl daemon-reload
systemctl start docker
systemctl enable docker
systemctl restart docker

3.3 安裝kubeadm, kubectl, kubelet

# master執行以下
cd /etc/yum.repos.d/
nano kubernetes.repo

# 添加如下內容
[kubernetes]
name=Kubernetes	Repository
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

# master檢查倉庫
yum repolist
yum list all | grep "^kube"

# master執行安裝
yum install kubeadm kubelet kubectl -y

# 檢查安裝
rpm -ql kubectl 
rpm -ql kubeadm

# master上把倉庫拷貝過去
cd /etc/yum.repos.d/
scp kubernetes.repo k8s-node01:/etc/yum.repos.d/

# 所有node安裝kubelet kubeadm
yum install kubelet kubeadm -y

# master和node執行以下
systemctl enable kubelet.service

# master查看所需的鏡像
kubeadm config images list

# 所有機器都執行以下的拉取鏡像的操作
# 由於kubeadm依賴國外的k8s.gcr.io的鏡像,國內被牆所以這邊的解決方案是下載國內的鏡像重新打tag的方式
docker pull lzw5399/kube-proxy:v1.18.3
docker pull lzw5399/kube-apiserver:v1.18.3
docker pull lzw5399/kube-controller-manager:v1.18.3
docker pull lzw5399/kube-scheduler:v1.18.3
docker pull lzw5399/coredns:1.6.7
docker pull lzw5399/etcd:3.4.3-0
docker pull lzw5399/pause:3.2

# 修改tag
docker tag lzw5399/kube-proxy:v1.18.3 k8s.gcr.io/kube-proxy:v1.18.3
docker tag lzw5399/kube-apiserver:v1.18.3 k8s.gcr.io/kube-apiserver:v1.18.3
docker tag lzw5399/kube-controller-manager:v1.18.3 k8s.gcr.io/kube-controller-manager:v1.18.3
docker tag lzw5399/kube-scheduler:v1.18.3 k8s.gcr.io/kube-scheduler:v1.18.3
docker tag lzw5399/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
docker tag lzw5399/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag lzw5399/pause:3.2 k8s.gcr.io/pause:3.2

# 移除沒用的鏡像
docker rmi lzw5399/kube-proxy:v1.18.3
docker rmi lzw5399/kube-apiserver:v1.18.3
docker rmi lzw5399/kube-controller-manager:v1.18.3
docker rmi lzw5399/kube-scheduler:v1.18.3
docker rmi lzw5399/coredns:1.6.7
docker rmi lzw5399/etcd:3.4.3-0
docker rmi lzw5399/pause:3.2

3.4 master初始化kubeadm

# master執行init初始化
kubeadm init \
--kubernetes-version="v1.18.3" \
--pod-network-cidr="10.244.0.0/16" \
--ignore-preflight-errors="NumCPU"

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

# 應用網絡插件flannle
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

3.5 node加入集群

# 加入集群
# 這里具體的語句在master上init成功后就會通過log打印出來,直接復制到node上用就好了
kubeadm join 172.19.227.80:6443 --token vdyayi.ghs1zut7yxd94vru \
    --discovery-token-ca-cert-hash sha256:fcdaaaf7411b786e3d5bb77c1d190e278a2952e1f415012cfdeea31c0af7547b \
    --v=4

3.6 查看部署狀態

# master查看node節點狀態
kubectl get nodes

# master查看kube-system命名空間下的pod啟動的狀態
kubectl get po -n kube-system

# 如果有pod一直啟動不起來,通過describe查看狀態
kubectl describe po/{具體的pod名字} -n kube-system


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM