编辑
2023-02-03
云原生
00
请注意,本文编写于 865 天前,最后修改于 865 天前,其中某些信息可能已经过时。

目录

环境规划与说明
组件功能介绍
部署流程
升级内核
升级docker
下载k8s组件
配置好内核参数
配置k8S的yum源
安装配置集群流程
遇到的问题
node节点加入集群报错。
kubeadm初始化报错

环境规划与说明

master 2C2G
(centos7 内核V5.17.0)
192.168.190.110k8s组件版本 v1.17.2docker 版本 20.10.14
node192.168.190.111k8s组件版本 v1.17.2docker 版本 20.10.14
node192.168.190.112k8s组件版本 v1.17.2docker 版本 20.10.14
hrbor 1C2G192.168.190.113harbor 版本 v1.7.6docker-compose1.18.0

组件功能介绍

**组件名称 **组件作用组件所在节点
ETCDetcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划master
kube-apiserverkube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行master
kube-controller-managerkube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行master
kube-scheduler监视新创建没有分配到Node的Pod,为Pod选择一个Nodemaster
kubeletkubelet是主要的节点代理,它会监视已分配给节点的pod的状态,主机的资源情况node master
kube-proxykube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象node
docker 引擎运行容器node master

部署流程

升级内核

升级内核的官方操作流程:http://elrepo.org/tiki/HomePage

升级docker

1.保证内核版本在3.10及以上:uname -a
2.删除旧版本:yum remove -y docker docker-common docker-selinux docker-engine #这一步骤在初次安装docker也最好执行一次,否则后面安装docker可能会报错
3.安装需要的软件包:yum install -y yum-utils device-mapper-persistent-data lvm2
4.设置Docker yum源:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5.查看所有仓库中所有docker版本:yum list docker-ce --showduplicates | sort -r
--showduplicates 列出所有版本
6.安装docker:yum install docker-ce -y #由于repo中默认只开启stable仓库,故这里一般会默认安装最新版本.如果要安装特定版本:yum install docker-ce-18.06.0.ce-3.el7 -y
7.设置为开机启动:systemctl enable docker
8.启动:systemctl start docker
9.查看启动状态:systemctl status docker
10.查看版本:docker version

下载k8s组件

阿里镜像站下载1.17版本的rpm包
https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/Packages/

bash
wget https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/Packages/105d89f0607c7baf91305ba352e78000bd20aad5cdf706bffff3b31cd546dbf3-kubeadm-1.17.2-0.x86_64.rpm wget https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/Packages/b44630896c69cd411db53be1d5cb5ae899a40aba7c0766317ea904390fcfc45b-kubectl-1.17.2-0.x86_64.rpm wget https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/Packages/3ee7f2dff78e6fbb3ac3af8acb1a907f4bec1b1ef4cf627cbe02fa553707f2e9-kubelet-1.17.2-0.x86_64.rpm wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 下载后修改名字 kubectl-1.17.2.rpm kubeadm-1.17.2.rpm kubelet-1.17.2.rpm

说明:1·关闭 firewalld 2· 关闭 selinux 3· 关闭 swap 交换分区 4·最好用2G内存、2个cpu

配置好内核参数

bash
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 [root@master-90 /etc/yum.repos.d]# sysctl -p

配置k8S的yum源

bash
[root@master-90 /etc/yum.repos.d]# vim 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 ##安装需要的依赖包,也可直接使用yum源的包安装k8s.各个节点都需要安装

安装配置集群流程

basic
yum install kubeadm-1.17.2.rpm kubectl-1.17.2.rpm kubelet-1.17.2.rpm #安装k8s组件 systemctl enable kubelet #自启动 kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.17.2 --apiserver-advertise-address 192.168.190.110 --pod-network-cidr=10.244.0.0/16 --token-ttl 0 #初始化集群 参数说明 --apiserver-advertise-address=192.168.190.110 这个参数就是master主机的IP地址,例如我的Master主机的IP是:192.168.181.131 --image-repository=registry.aliyuncs.com/google_containers 这个是镜像地址,由于国外地址无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/google_containers --kubernetes-version=v1.17.2 这个参数是下载的k8s软件版本号 --service-cidr=10.96.0.0/12 默认ip段。这个参数后的IP地址直接就套用10.96.0.0/12 ,以后安装时也套用即可,不要更改 --pod-network-cidr=10.244.0.0/16 k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16 kubeadm token create --print-join-command #显示加入集群的口令 ##安装flannel网络组件 使用官方的yml方式。国内可能无法访问 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kube-ctl apply -f kube-flannel.yml #安装网络组件,下附文件 ##node加入集群,执行该命令 kubeadm join 192.168.190.110:6443 --token pkh64n.8fereapfpjbadwm3 --discovery-token-ca-cert-hash sha256:1d0670edb3ffd88de2bd0f50143b2ab923723ee2f92c5e62bb7eff47bbdfe0eb 显示下方所示,node加入成功 [root@k8s-110 ~]# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s-110 Ready master 21h v1.17.2 192.168.190.110 <none> CentOS Linux 7 (Core) 5.17.0-1.el7.elrepo.x86_64 docker://20.10.14 k8s-111 Ready <none> 21h v1.17.2 192.168.190.111 <none> CentOS Linux 7 (Core) 5.17.0-1.el7.elrepo.x86_64 docker://20.10.14 ####安装harbor #下载链接:https://github.com/goharbor/harbor/releases #这里我用的是v1.7.6版本 #安装docker-compose yum install docker-compose -y #解压harbor压缩包 tar xf harbor-offline-installer-v1.7.6.tgz #修改harbor配置文件 ########################## [root@k8s-113 harbor]# vim harbor.cfg hostname = www.yytlinux.com ui_url_protocol = http #默认http,使用https需要自行生成证书 ########################## 执行安装脚本./install.sh ----Harbor has been installed and started successfully.---- 上述所示安装成功 启动服务 docker-compose up -d 配置主机hosts解析后可以本地打开harbor页面,节点需要先登录才可以上传下载镜像 docker login www.yytlinux.com 账户admin 密码Harbor12345 默认 标签严格按照harbor的规则 [root@docker-33 ~/.docker]# docker tag nginx:latest hub.uplooking.com/repo/nginx:v1 [root@docker-33 ~/.docker]# docker push hub.uplooking.com/repo/nginx:v1

kube-flannel.doc
配置阿里云镜像加速,配置harbor仓库的信任。每个节点都需要
[root@k8s-113 harbor]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://qtlj897j.mirror.aliyuncs.com"] ,
"insecure-registries":"[http://www.yytlinux.com","https://quay-mirror.qiniu.com"]
}

遇到的问题

node节点加入集群报错。

[root@k8s-112 ~]# kubeadm join 192.168.190.110:6443 --token zv9sd7.y1sy2uy4gvvdqtfv --discovery-token-ca-cert-hash sha256:1d0670edb3ffd88de2bd0f50143b2ab923723ee2f92c5e62bb7eff47bbdfe0eb
W0331 17:03:34.740262 122749 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher

[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.

两类报错 解决方法:kubeadm reset

kubeadm初始化报错

残留的上个集群数据,可以根据报错直接删除,也可以
kubeadm reset #重置,需要干净的环境,最好是这样

image.png
解决办法 rm -rf /var/lib/etcd

外链:https://www.cnblogs.com/omgasw/p/10548334.html 问题整理

本文作者:碳水教父

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!