Kubernetes(常简称为 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序,lz也不知道哪根脑经秀逗了,竟然妄挑战学习一下,结果折戟沉沙,被折腾的欲仙欲死,不过索性还是搭建成功了~
问题1:kubelet、kubeadm、kubectl No apt package
问题2:kubeadm config images pull 拉取不到镜像
1. 入门先知
Kubernetes(常简称为 K8s),了解它的人都知道。它这个集群服务很强大,具体强大到哪呢,lz也不知道。毕竟,lz对它的初次了解始于两天前。所以,这篇博客很适合新手。
k8s主要和docker搭配使用,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。通过它,可以让多个不同服务器进行集群化,达到通信负载均衡等目的。
在 Kubernetes 生态系统中,kubelet
、kubeadm
和 kubectl
是三个关键的命令行工具,每个工具都有其独特的作用和用途:
-
kubelet
- 作用:
kubelet
是 Kubernetes 集群中的节点代理,它在每个节点上运行,负责维护容器的生命周期,包括启动容器、监控容器运行状态以及向 Kubernetes 控制平面报告节点和容器的状态。 - 功能:
kubelet
接收来自 Kubernetes 控制平面的指令,确保容器、镜像和 Kubernetes 卷的正确配置和状态。它还处理节点上的网络配置和容器运行环境。 - 用户交互:通常,用户不会直接与
kubelet
交互,而是通过kubectl
命令行工具或其他 Kubernetes API 客户端。
- 作用:
-
kubeadm
- 作用:
kubeadm
是 Kubernetes 的集群生命周期管理工具,用于初始化和升级 Kubernetes 集群。 - 功能:
kubeadm
提供了一系列命令来简化 Kubernetes 集群的创建、升级和维护。它负责初始化集群的控制平面节点,包括启动所需的服务(如 API 服务器、调度器、控制器管理器等),并生成必要的证书和配置文件。 - 用户交互:通常由集群管理员使用
kubeadm
来初始化新集群或升级现有集群。它也可以用来添加新的节点到集群中。
- 作用:
-
kubectl
- 作用:
kubectl
是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互和管理资源。 - 功能:
kubectl
提供了丰富的命令来操作 Kubernetes 资源,如创建、删除、更新和获取资源信息。它支持资源的滚动更新、日志查看、执行容器内命令、资源监控等功能。 - 用户交互:用户和开发者通常通过
kubectl
命令行工具与 Kubernetes 集群交互,执行各种管理和操作任务。
- 作用:
2.安装k8s及填坑说明
网上的一些教程有一些说的是多集群的安装,也就是涉及多个服务器。这里只做一个服务器的安装,作为主master节点。所以关于host,ip等配置就不多加叙述。
示例服务器:华为云 Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
kubernetes官方地址:Kubernetes
2.1 docker安装与镜像源配置
docker和k8s相关工具的安装都需要拉取镜像,但是国内服务器被限制访问外部,导致很多镜像都拉取不到,一些大厂提供的镜像源也逐渐废弃,所以,如果找到了稳定可靠的镜像源,且行且珍惜。
shell终端登录服务器第一步,先更新软件包,再安装docker:
# 更新软件包
root@ecs-291408:~# apt update# 安装docker
root@ecs-291408:~# apt-get -y install docker.io
至此,docker就安装好了,后面再配置一下docker的镜像源:
在目录下创建对应文件 /etc/docker/datmon.json
root@ecs-291408:~# cd /etc/docker
root@ecs-291408:/etc/docker# touch datmon.json
root@ecs-291408:/etc/docker# ls
datmon.json
配置如下内容:
{"registry-mirrors": ["https://mirrors.tuna.tsinghua.edu.cn"]
}
重启 Docker,使配置生效,docker info 查看是否配置成功
sudo systemctl daemon-reloadsudo systemctl restart docker
2.2 kubelet、kubeadm、kubectl安装
通过apt 命令安装:
apt-get install -y apt-transport-https curl
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
理所当然提示包不存在,还是老生常谈的问题,apt镜像源没有k8s 的软件包。
再来配置下apt的镜像源,进入 /etc/apt/sources.list 配置文件,加上下面这行阿里云镜像源地址
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
再进行 apt update 更新,会提示如下:
The following signatures couldn't be verified because the public key is not available
则执行下面命令,为期添加 key。
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
后面再apt update 更新,就只会提示:
Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
这里不用管,不影响工具包的正常安装。输入 apt search kubectl 能显示出对应的工具包,说明镜像源生效了。我们接下来还是安装k8s的三个工具。
2.3 kubeadm init 初始化问题
Tips:这里有个注意事项,卡了lz一天。一定要注意!一定要注意!!一定要注意!!!重要的事情说三遍,千万不要走默认直接安装,因为默认安装会是最新的版本,v1.28.2。而最新的版本在进行kubeadm init 初始化集群时,每次都会去k8s.gcr.io拉取镜像。拉不到啊!!
kubeadm自版本1.24开始,每次kubeadm init 初始化集群就会通过内置去拉取镜像,而不会通过docker去找已经有的镜像, 而通过内置拉取镜像,是不走镜像源的,服务器在国内,由于某些原因,是无法访问"k8s.gcr.io", "gcr.io", "quay.io" 。所以就会出现一种常见的问题:
kubeadm config images pull 拉取不到镜像,超时,包不存在等问题
而解决办法就是,这里我们要安装指定版本:kubelet、kubeadm、kubectl :
apt-get -y install kubectl=1.21.3-00 kubelet=1.21.3-00 kubeadm=1.21.3-00
安装好之后,我们要通过 :kubeadm config images list
列出对应需要的镜像,然后通过docker访问国内镜像源的方式手动来安装。这样在进行初始化集群的时候就不会去重新拉取了,而会找docker已经拉取的镜像。
root@ecs-291408:~# kubeadm config images list
I0913 10:10:02.881062 14452 version.go:254] remote version is much newer: v1.31.0; falling back to: stable-1.21
k8s.gcr.io/kube-apiserver:v1.21.14
k8s.gcr.io/kube-controller-manager:v1.21.14
k8s.gcr.io/kube-scheduler:v1.21.14
k8s.gcr.io/kube-proxy:v1.21.14
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0
创建下面的bat脚本,并执行,该脚本的意义就是通过国内镜像源拉取对应版本号所需的镜像,然后再打标签命名为对应仓库版本名称,以此达到狸猫换太子的目的。
#/bin/bash
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.14
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.14
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.14
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.14
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0
docker pull quay.io/coreos/flannel:v0.15.1-amd64docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.14 k8s.gcr.io/kube-apiserver:v1.21.14
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.14 k8s.gcr.io/kube-controller-manager:v1.21.14
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.14 k8s.gcr.io/kube-scheduler:v1.21.14
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.14 k8s.gcr.io/kube-proxy:v1.21.14
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1 k8s.gcr.io/pause:3.4.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.14
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.14
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.14
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.14
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0
执行脚本之后,输入docker images 显示的列表和 kubeadm config images list 显示的镜像列表一样,说明就成功了。
然后就可以 kubeadm init 奔放啦~
安装完后,别忘了按照要求执行以下两个命令:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configexport KUBECONFIG=/etc/kubernetes/admin.conf
为了使主节点生效,还需要安装网络插件:
#kube-flannel.yml文件地址:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml kubectl get pods --all-namespaces
3.结束语
兜兜转转,不忘初心,方得始终。听闻会k8s者,可成架构师。吾也不知真假,毕竟才接触两天。lz本来是想搞个k8s的可视化控制面板的。但是无奈卡在安装这里。窥一豹而见全貌,lz大概能想象的到它的强大了。后面有机会再了解吧。
我一定会回来的!!
推荐k8可视化面板:
KubeSphere官方地址
kuboard Git地址
这两个面版界面看着还不错,深得我心。奈何能力不济,搭建不出来~