安装环境
-
安装docker,并且启动服务,设置为开机自启
# 下载安装 docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 配置阿里云镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://k47rrbam.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker # 设置docker 为开机启动,并且启动docker systemctl enable docker systemctl start docker -
安装k8s的核心组件
- kubeadm
- kubelet
- kubectl
安装 kubeadm | Kubernetes官方安装指南
安装三个核心包,我们自带的服务器使用的是linux的centos的发行版本,所以我们是red hat公司的开源发行版本
cat <
直接采用yum包安装,这里配置的yum镜像是google的镜像,在国内下载速度显然是很慢的,我们选择配置aliyun的镜像
cat > /etc/yum.repos.d/kubernetes.repo << EOF [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 # 将 SELinux 设置为 permissive 模式(相当于将其禁用) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes sudo systemctl enable --now kubelet
这里需要注意一点,如果三个包是单独安装的,千万要注意版本兼容,这三个包本质上都是为了实现kubernetes的功能,三个包要相互协作,如果版本不兼容,可能会产生意料之外的错误。最好安装同一个版本
然后就安装完毕了,就可以一些实现一些k8s的功能了
kubeadm init # 初始化集群 kubeadm join # 其他节点加入集群
初始化集群时设置一些参数
kubeadm init --kubernetes-version 1.18.0 --apiserver-advertise-address=0.0.0.0 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.245.0.0/16 --image-repository registry.aliyuncs.com/google_containers
否则会到进入google仓库拉起,很浪费时间
kubeadm 是一个用来开启和运行最小可用集群的工具
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zah2VOVA-1635912218396)(C:UsersHPAppDataRoamingTyporatypora-user-imagesimage-20211103092826051.png)]
我们可以查看kubeadm的帮助文档,可以看到kubeadm提供了一个创建两个节点的集群的demo
- 在第一个机器上,使用kubeadm的 kubeadm init的命令进行初始化集群。
- 在第二个机器上,使用kubeadm join相关参数就可以加入第一个节点创建的集群。如果有多台机器执行此指令,就组建了一个多台机器的计算机集群。
除此之外,我们具体地查看一下kubeadm的主要命令
- kubeadm completion:用特别的bash zsh or shell命令输出
- kubeadm config:管理集群的配置
- kubeadm init:建立一个kubernetes控制台,初始化主节点
- kubeadm join:运行其他机器加入集群
- kubeadm reset:用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更
- kubeadm token:管理kubeadm join使用的令牌
- kubeadm upgrade:提升集群的版本
- kubeadm version:查看版本信息
- 先下载docker,然后配置阿里云镜像加速,启动服务并且设置开机自启,然后进行docker开启一个测试的容器
我们发现,有时候可能会出现一个问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I4Omw8UB-1635912218399)(C:UsersHPAppDataRoamingTyporatypora-user-imagesimage-20211103103742320.png)]
查询了相关资源,了解到了造成这问题的原因是docker缺少一个依赖包,libseccomp-devel,只要安装了这个包,问题就解决了
yum install -y libseccomp-devel
我们查了一下这个包是干啥的?
安全计算模式 seccomp(Secure Computing Mode)是自 Linux 2.6.10 之后引入到 kernel 的特性。一切都在内核中完成,不需要额外的上下文切换,所以不会造成性能问题。目前 在 Docker 和 Chrome 中广泛使用。使用 seccomp,可以定义系统调用白名单和黑名单,可以 定义出现非法系统调用时候的动作,比如结束进程或者使进程调用失败。
docker本身需要对linux内核的服务,我们在安装linux版本的时候,镜像id可能会造成这个问题,有的linux镜像中包含这个包就不会遇到这个问题。
-
按照上面的步骤安装k8s核心包,注意使用阿里云的镜像包
-
初始化主节点
这里有很多坑
- 要配置aliyun仓库,要不然卡到爆
- 如果初始化过程中出现了错误,准备再次初始化之前,将上次初始化时创建的文件删除干净
- 版本问题,节点使用版本必须高于下载的kubeadm的版本,我们在下载时,没有设置版本号,所以下载的时k8s的最新版本的,但是在阿里云的仓库中,没有和最新版想兼容的容器
所以安装k8s的时候千万不要完全按照官方的步骤走,因为基于google镜像的速度真的感人
我们这里要卸载k8s和删除相关的包,然后重新安装k8s,docker不需要重新操作
删除k8s集群-
删除k8s中的所有结点
kubectl delete node -all
-
停止所有k8s服务
for service in kube-apiserver kube-controller-manager kubectl kubelet kube-scheduler; do systemctl stop $service done
-
回退当前的节点的操作,并且删除所有的相关配置文件
kubeadm reset -f rm -rf ~/.kube/ rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cni rm -rf /var/lib/etcd rm -rf /var/etcd yum clean all yum remove kube*
-
然后删除docker的所有镜像
docker rmi -r $(docker images -aq)
重新安装k8s
- 配置镜像
cat > /etc/yum.repos.d/kubernetes.repo << EOF [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
-
下载k8s,千万要指定版本,千万要指定版本,千万要指定版本 不然就会下载最新版,然后就掉坑了
yum install -y kubelet-1.16.9 kubeadm-1.16.9 kubectl-1.16.9
-
设置开机启动
systemctl enable kubelet
-
初始化主节点
kubeadm init --kubernetes-version 1.18.8 --apiserver-advertise-address=0.0.0.0 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.245.0.0/16 --image-repository registry.aliyuncs.com/google_containers
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLLHbkEp-1635912218402)(C:UsersHPAppDataRoamingTyporatypora-user-imagesimage-20211103114609631.png)]
集群创建成功,控制节点成功初始化
结果最后一行给出的就是其他节点加入集群的脚本,因为需要令牌认证
kubeadm join 172.16.188.15:6443 --token pke3nd.c45isxxsbuadz4a2 --discovery-token-ca-cert-hash sha256:bb88f759348db4c3866e2dd7210069c405b8a520c377f470bb7b921ab81809a9我们在其他两个结点运行这个脚本,其他两个结点就加入了这个集群
然后查看集群结点信息
kubecrl get nodes
我们发现又进坑了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPrRntNH-1635912218404)(C:UsersHPAppDataRoamingTyporatypora-user-imagesimage-20211103115339140.png)]
继续坑,这个是为啥呢
需要将主节点的/etc/kubernetes/admin.conf配置文件拷贝从节点目录下,并且开启配置权限,刷新
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后再吃查看结点信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmLIT9HM-1635912218405)(C:UsersHPAppDataRoamingTyporatypora-user-imagesimage-20211103115821833.png)]
我们这样我们就可以看到集群的结点信息,集群的结点初始化和创建都是由kubeadm来负责的。
推荐一个无坑安装版安装Kubernetes(k8s)保姆级教程)



