你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

基于kubeadm 的 Kubernetes(v1.19) 集群部署

2021-11-1 13:47:51

Kubernetes 进阶实战 学习笔记

一、分布式 Kubernetes(v1.19) 集群部署

1. 环境准备

Kubernetes项目版本迭代迅速,截至目前(2021.10.28)最新版本为v1.22,本次集群部署主要以学习《Kubernetes进阶实战》第二版为目的
操作系统、容器引擎、etcd 及 Kubernetes 的相关版本如下:

  • 操作系统:

    节点名称操作系统软件包管理方式硬件配置云厂商
    k8s-master01Ubuntu 18.04.6 LTSapt2核4G阿里云
    k8s-node01AliyunCloud Linux 2yum2核4G阿里云
    k8s-node02Ubuntu 18.04.4 LTSapt2核4G腾讯云
  • 容器运行时引擎:Docker version 19.03.6

  • Kubernetes: v1.19

其他配置:

# 关闭 swap
swapoff -a
# 如果主机为云服务器,需开放6443端口

2. 配置容器运行引擎

2.1 Ubuntu(apt包管理)安装指定版本docker

  • 本集群的Master节点环境为 Ubuntu 18.04.6 LTS, 2核4G, 采用 apt 管理软件包
  • 官网Ubuntu安装Docker参考:https://docs.docker.com/engine/install/ubuntu/
# 1. 更新 apt 索引信息后安装必要的程序包
sudo apt update
sudo apt install apt-transport-https ca-certificates \
  curl gnupg-agent software-properties-common
# 2. 添加 Docker 官方的GPG证书,已验证程序包签名
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 3.1 为 apt 添加稳定版本的Docker-CE仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable"
# 3.2 上述步骤也可使用 aliyun 镜像地址
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable"
# 修改仓库源配置命令
vim /etc/apt/sourceslist
# 4. 更新 apt 索引后安装 docker-ce
sudo apt update
# 列出可用的版本
# apt-cache madison docker-ce
# 安装最新版本的Docker-CE
# apt install docker-ce docker-ce-cli containerd.io
# 安装指定版本的 docker-ce , kubernetes 的版本对docker-ce的版本有要求
sudo apt-get install docker-ce=5:19.03.15~3-0~ubuntu-bionic
# 5. 配置 Docker 编辑配置文件 vim /etc/docker/daemon.json, 保存为以下内容
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {"max-size": "100m"},
  "storage-driver": "overlay2",
  "registry-mirrors": ["https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"]
}
# 6. 启动 Docker 服务,并设置服务可随系统引导启动
systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service

2.2 Aliyun Cloud(yum包管理)安装指定版本的 docker

  • 本集群的Worker节点系统环境为AlibabaCloud Linux, 采用 yum 管理软件包
  • 官网centos安装docker参考
    https://docs.docker.com/engine/install/centos/
# 彻底卸载Docker
yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-engine
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
# 安装指定版本的docker
# 安装 yum-utils
yum install -y yum-utils
# 安装 yum-config-manager
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看docker-ce可用版本
yum list docker-ce --showduplicates | sort -r 
# 安装指定版本 Docker (19.03.6-3.el7)
# yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
yum install docker-ce-19.03.6-3.el7 docker-ce-cli-19.03.6-3.el7 containerd.io

2.3 docker 安装问题汇总

1.yum 安装 docker 过程中依赖不全

请添加图片描述

# 解决办法
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release
yum install container-selinux

2.aliyun 镜像仓库出错

请添加图片描述

# 解决办法
cd /etc/yum.repos.d
vi CentOS-Base.repo
:%s/$releasever/7/g  #将文件中$releasever全部改成7
yum clean all 
yum repolist

上述执行完成后仍出现:

https://download-stage.docker.com/linux/centos/7/x86_64/stable/repodata/repomd.xml: [Errno 14] curl#35 - "TCP connection reset by peer"
Trying other mirror.

问题原因请参考:
https://help.aliyun.com/knowledge_detail/257795.html

问题解决办法:

# 使用sed -i 命令替换 $releasever 为 7
sed -i 's/$releasever/7/' /etc/yum.repos.d/docker-ce.repo

3. 安装 kubeadm kubelet kubectl

kubeadm 不会自行安装或者管理 kubelet 和 kubectl,所以需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配,
否则可能存在版本偏差的风险,从而导致一系列问题

3.1 Ubuntu(apt包管理)安装

# 1. 更新 apt 索引信息后安装必要的程序包
apt update && apt install -y apt-transport-https
# 2. 添加 Kubernetes 官方程序密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# 3. 在配置文件vim /etc/apt/sources.list.d/kubernetes.list 中添加如下内容,为apt程序包添加Kubernetes程序包仓库
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
# 4. 更新程序包索引并安装程序包
apt update
# install -y kubelet  kubeadm  kubeadm 会安装最新的版本,下面指定版本号
apt install -y kubelet=1.19.0-00 kubeadm=1.19.0-00 kubeadm=1.19.0-00

3.2 CentOS / RHEL / Fedora (yum包管理) 安装

# 配置kubernetes 仓库源
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 list kubeadm --showduplicates | sort -r
# 安装指定版本 1.19.0-0
yum install -y kubelet-1.19.0-0 kubeadm-1.19.0-0 kubeadm-1.19.0-0
# 开机启动
systemctl enable kubelet
systemctl start kubelet

4. 单控制平面集群

4.1 网络 IP-域名 配置

# 修改 vim /etc/hosts, 添加以下内容
# 各个节点都需添加,使用自己的公网或外网IP
47.100.x.x  k8s-master01  k8s-api
106.15.x.x    k8s-node01
81.69.x.x   k8s-node02

4.2 初始化控制平面

注意: 如果是在阿里云主机上部署,需要在安全组中开放 6443 端口

# 执行kubeadm init这段时,不要加上 --apiserver-advertise-address 这段参数即可。但是这样只能创建出单节点的k8s集群,其他node无法加入
# --apiserver-advertise-address 47.100.223.110 \
# --token-ttl 0 token 永不过时
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.0 \
--control-plane-endpoint k8s-api \
--pod-network-cidr 10.244.0.0/16 \
--node-name k8s-master01

kubeadm init 执行完成后出现以下提示:

# Your Kubernetes control-plane has initialized successfully!
# To start using your cluster, you need to run the following as a regular user:

# 配置当前用户(root)为集群管理员身份
  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/
...

4.3 部署 Flannel 网络插件

查看当前节点状态

# 查看当前节点状态
kubectl get nodes
kubectl get pods -n kube-system | grep flannel

如果 status 为 NotReady 执行下属命令安装Flannel网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

5. 添加工作节点

前提:

  • 在woker节点上按上述步骤安装一致版本的 kubeadm kubectl kubelet 以及对应版本的 docker-ce

执行:

  • 本集群的工作节点之一是 Aliyun Cloud Linux 2 系统,在工作节点上执行以下命令:
# 修改 vim /etc/hosts, 添加以下内容
# 各个节点都需添加,使用自己的公网或外网IP
47.100.x.x  k8s-master01  k8s-api
106.15.x.x    k8s-node01
81.69.x.x   k8s-node02

# 执行添加节点命令
kubeadm join k8s-api:6443 --token ffffa.fdfdfdsfdsfds \
    --discovery-token-ca-cert-hash sha256:5c3116488074f2cb196fb783bb0lklzffd3333333333333333 \
    --node-name k8s-node01

# 执行结果
[preflight] Running pre-flight checks
        [WARNING Service-Docker]: docker service is not enabled, please run 'systemctl enable docker.service'
        [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
syste
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

master 节点查看状态:

~# kubectl get nodes
NAME           STATUS   ROLES    AGE    VERSION
k8s-master01   Ready    master   121m   v1.19.0
k8s-node01     Ready    <none>   118m   v1.19.0
k8s-node02     Ready    <none>   113m   v1.19.0

单 master 节点,双 worker 节点的集群部署完成