基于kubeadm 的 Kubernetes(v1.19) 集群部署
Kubernetes 进阶实战 学习笔记一、分布式 Kubernetes(v1.19) 集群部署1. 环境准备Kubernetes项目版本迭代迅速,截至目前(2021.10.28)最新版本为v1.22,本次集群部署主要以学习《Kubernetes进阶实战》第二版为目的操作系统、容器引擎、etcd 及 Kubernetes 的相关版本如下:操作系统:节点名称操作系统软件包管理方式硬件配置云厂商k8s
Kubernetes 进阶实战 学习笔记
一、分布式 Kubernetes(v1.19) 集群部署
1. 环境准备
Kubernetes项目版本迭代迅速,截至目前(2021.10.28)最新版本为v1.22,本次集群部署主要以学习《Kubernetes进阶实战》第二版为目的
操作系统、容器引擎、etcd 及 Kubernetes 的相关版本如下:
-
操作系统:
节点名称 操作系统 软件包管理方式 硬件配置 云厂商 k8s-master01 Ubuntu 18.04.6 LTS apt 2核4G 阿里云 k8s-node01 AliyunCloud Linux 2 yum 2核4G 阿里云 k8s-node02 Ubuntu 18.04.4 LTS apt 2核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 节点的集群部署完成
更多推荐
所有评论(0)