一、前言
二、基础环境部署
1)前期准备(所有节点)
2)安装容器 docker(所有节点)
3)配置 k8s yum 源(所有节点)
4)将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)
5)配置 containerd cgroup 驱动程序 systemd(所有节点)
6)开始安装 kubeadm,kubelet 和 kubectl(master 节点)
7)使用 kubeadm 初始化集群(master 节点)
8)安装 Pod 网络插件(CNI:Container Network Interface)(master)
9)node 节点加入 k8s 集群
10)配置 IPVS
11)集群高可用配置
12)部署 Nginx+Keepalived 高可用负载均衡器
三、k8s 管理平台 dashboard 环境部署
1)dashboard 部署
2)创建登录用户
3)配置 hosts 登录 dashboard web
四、k8s 镜像仓库 harbor 环境部署
1)安装 helm
2)配置 hosts
3)创建 stl 证书
4)安装 ingress
5)安装 nfs
6)创建 nfs provisioner 和持久化存储 SC
7)部署 Harbor(Https 方式)
一、前言
官网:https://kubernetes.io/
官方文档:https://kubernetes.io/zh-cn/docs/home/
二、基础环境部署
1)前期准备(所有节点)
1、修改主机名和配置 hosts
先部署 1master 和 2node 节点,后面再加一个 master 节点
# 在192.168.0.113执行hostnamectl set-hostname k8s-master-168-0-113# 在192.168.0.114执行hostnamectl set-hostname k8s-node1-168-0-114# 在192.168.0.115执行hostnamectl set-hostname k8s-node2-168-0-115登录后复制
配置 hosts
cat >> /etc/hosts<<EOF192.168.0.113 k8s-master-168-0-113192.168.0.114 k8s-node1-168-0-114192.168.0.115 k8s-node2-168-0-115EOF登录后复制
2、配置 ssh 互信
# 直接一直回车就行ssh-keygenssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master-168-0-113ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node1-168-0-114ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node2-168-0-115登录后复制
3、时间同步
yum install chrony -ysystemctl start chronydsystemctl enable chronydchronyc sources登录后复制 登录后复制
4、关闭防火墙
systemctl stop firewalldsystemctl disable firewalld登录后复制 登录后复制
5、关闭 swap
# 临时关闭;关闭swap主要是为了性能考虑swapoff -a# 可以通过这个命令查看swap是否关闭了free# 永久关闭sed -ri 's/.*swap.*/#&/' /etc/fstab登录后复制 登录后复制
6、禁用 SELinux
# 临时关闭setenforce 0# 永久禁用sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config登录后复制 登录后复制
7、允许 iptables 检查桥接流量(可选,所有节点)
若要显式加载此模块,请运行 sudo modprobe br_netfilter,通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载,
sudo modprobe br_netfilterlsmod | grep br_netfilter登录后复制 登录后复制
为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。例如:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.confoverlaybr_netfilterEOFsudo modprobe overlaysudo modprobe br_netfilter# 设置所需的 sysctl 参数,参数在重新启动后保持不变cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1EOF# 应用 sysctl 参数而不重新启动sudo sysctl --system登录后复制 登录后复制
2)安装容器 docker(所有节点)
提示:v1.24 之前的 Kubernetes 版本包括与 Docker Engine 的直接集成,使用名为 dockershim 的组件。这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。你可以阅读检查 Dockershim 弃用是否会影响你 以了解此删除可能会如何影响你。要了解如何使用 dockershim 进行迁移,请参阅从 dockershim 迁移。
# 配置yum源cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/# centos7wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# centos8wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo# 安装yum-config-manager配置工具yum -y install yum-utils# 设置yum源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装docker-ce版本yum install -y docker-ce# 启动systemctl start docker# 开机自启systemctl enable docker# 查看版本号docker --version# 查看版本具体信息docker version# Docker镜像源设置# 修改文件 /etc/docker/daemon.json,没有这个文件就创建# 添加以下内容后,重启docker服务:cat >/etc/docker/daemon.json<<EOF{ "registry-mirrors": ["http://hub-mirror.c.163.com"]}EOF# 加载systemctl reload docker# 查看systemctl status docker containerd登录后复制 登录后复制
【温馨提示】dockerd 实际真实调用的还是 containerd 的 api 接口,containerd 是 dockerd 和 runC 之间的一个中间交流组件。所以启动 docker 服务的时候,也会启动 containerd 服务的。
3)配置 k8s yum 源(所有节点)
cat > /etc/yum.repos.d/kubernetes.repo << EOF[k8s]name=k8senabled=1gpgcheck=0baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/EOF登录后复制 登录后复制
4)将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)
# 导出默认配置,config.toml这个文件默认是不存在的containerd config default > /etc/containerd/config.tomlgrep sandbox_image /etc/containerd/config.tomlsed -i "s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.tomlgrep sandbox_image /etc/containerd/config.toml登录后复制 登录后复制
5)配置 containerd cgroup 驱动程序 systemd(所有节点)
kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装),上面安装 docker 的时候就自动安装了 containerd 了。这里的 docker 只是作为客户端而已。容器引擎还是 containerd。
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml# 应用所有更改后,重新启动containerdsystemctl restart containerd登录后复制 登录后复制
6)开始安装 kubeadm,kubelet 和 kubectl(master 节点)
# 不指定版本就是最新版本,当前最新版就是1.24.1yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务systemctl enable --now kubelet# 查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢systemctl status kubelet登录后复制
查看日志,发现有报错,报错如下:
kubelet.service: Main process exited, code=exited, status=1/FAILURE kubelet.service: Failed with result 'exit-code'.
【解释】重新安装(或第一次安装)k8s,未经过 kubeadm init 或者 kubeadm join 后,kubelet 会不断重启,这个是正常现象……,执行 init 或 join 后问题会自动解决,对此官网有如下描述,也就是此时不用理会 kubelet.service。
查看版本
kubectl versionyum info kubeadm登录后复制
7)使用 kubeadm 初始化集群(master 节点)
最好提前把镜像下载好,这样安装快
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.24.1docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.24.1docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.24.1docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.24.1docker pull registry.aliyuncs.com/google_containers/pause:3.7docker pull registry.aliyuncs.com/google_containers/etcd:3.5.3-0docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6登录后复制
集群初始化
kubeadm init \ --apiserver-advertise-address=192.168.0.113 \ --image-repository registry.aliyuncs.com/google_containers \ --control-plane-endpoint=cluster-endpoint \ --kubernetes-version v1.24.1 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16 \ --v=5# –image-repository string: 这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers# –kubernetes-version string: 指定kubenets版本号,默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(v1.22.1)来跳过网络请求。# –apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更换。# –pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。# --control-plane-endpoint cluster-endpoint 是映射到该 IP 的自定义 DNS 名称,这里配置hosts映射:192.168.0.113 cluster-endpoint。 这将允许你将 --control-plane-endpoint=cluster-endpoint 传递给 kubeadm init,并将相同的 DNS 名称传递给 kubeadm join。 稍后你可以修改 cluster-endpoint 以指向高可用性方案中的负载均衡器的地址。登录后复制
【温馨提示】kubeadm 不支持将没有 --control-plane-endpoint 参数的单个控制平面集群转换为高可用性集群。
重置再初始化
kubeadm resetrm -fr ~/.kube/ /etc/kubernetes#&/' /etc/fstab登录后复制 登录后复制
5、禁用 SELinux
# 临时关闭setenforce 0# 永久禁用sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config登录后复制 登录后复制
6、允许 iptables 检查桥接流量(可选,所有节点)
若要显式加载此模块,请运行 sudo modprobe br_netfilter,通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载,
sudo modprobe br_netfilterlsmod | grep br_netfilter登录后复制 登录后复制
为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。例如:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.confoverlaybr_netfilterEOFsudo modprobe overlaysudo modprobe br_netfilter# 设置所需的 sysctl 参数,参数在重新启动后保持不变cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1EOF# 应用 sysctl 参数而不重新启动sudo sysctl --system登录后复制 登录后复制
7、安装容器 docker(所有节点)
提示:v1.24 之前的 Kubernetes 版本包括与 Docker Engine 的直接集成,使用名为 dockershim 的组件。这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。你可以阅读检查 Dockershim 弃用是否会影响你 以了解此删除可能会如何影响你。要了解如何使用 dockershim 进行迁移,请参阅从 dockershim 迁移。
# 配置yum源cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/# centos7wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# centos8wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo# 安装yum-config-manager配置工具yum -y install yum-utils# 设置yum源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装docker-ce版本yum install -y docker-ce# 启动systemctl start docker# 开机自启systemctl enable docker# 查看版本号docker --version# 查看版本具体信息docker version# Docker镜像源设置# 修改文件 /etc/docker/daemon.json,没有这个文件就创建# 添加以下内容后,重启docker服务:cat >/etc/docker/daemon.json<<EOF{ "registry-mirrors": ["http://hub-mirror.c.163.com"]}EOF# 加载systemctl reload docker# 查看systemctl status docker containerd登录后复制 登录后复制
【温馨提示】dockerd 实际真实调用的还是 containerd 的 api 接口,containerd 是 dockerd 和 runC 之间的一个中间交流组件。所以启动 docker 服务的时候,也会启动 containerd 服务的。
8、配置 k8s yum 源(所有节点)
cat > /etc/yum.repos.d/kubernetes.repo << EOF[k8s]name=k8senabled=1gpgcheck=0baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/EOF登录后复制 登录后复制
9、将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)
# 导出默认配置,config.toml这个文件默认是不存在的containerd config default > /etc/containerd/config.tomlgrep sandbox_image /etc/containerd/config.tomlsed -i "s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.tomlgrep sandbox_image /etc/containerd/config.toml登录后复制 登录后复制
10、配置 containerd cgroup 驱动程序 systemd
kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装),上面安装 docker 的时候就自动安装了 containerd 了。这里的 docker 只是作为客户端而已。容器引擎还是 containerd。
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml# 应用所有更改后,重新启动containerdsystemctl restart containerd登录后复制 登录后复制
11、开始安装 kubeadm,kubelet 和 kubectl(master 节点)
# 不指定版本就是最新版本,当前最新版就是1.24.1yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务systemctl enable --now kubelet# 查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢systemctl status kubelet# 查看版本kubectl versionyum info kubeadm登录后复制
12、加入 k8s 集群
# 证如果过期了,可以使用下面命令生成新证书上传,这里会打印出certificate key,后面会用到kubeadm init phase upload-certs --upload-certs# 你还可以在 【init】期间指定自定义的 --certificate-key,以后可以由 join 使用。 要生成这样的密钥,可以使用以下命令(这里不执行,就用上面那个自命令就可以了):kubeadm certs certificate-keykubeadm token create --print-join-commandkubeadm join cluster-endpoint:6443 --token wswrfw.fc81au4yvy6ovmhh --discovery-token-ca-cert-hash sha256:43a3924c25104d4393462105639f6a02b8ce284728775ef9f9c30eed8e0abc0f --control-plane --certificate-key 8d2709697403b74e35d05a420bd2c19fd8c11914eb45f2ff22937b245bed5b68# --control-plane 标志通知 kubeadm join 创建一个新的控制平面。加入master必须加这个标记# --certificate-key ... 将导致从集群中的 kubeadm-certs Secret 下载控制平面证书并使用给定的密钥进行解密。这里的值就是上面这个命令(kubeadm init phase upload-certs --upload-certs)打印出的key。登录后复制
根据提示执行如下命令:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config登录后复制
查看
kubectl get nodeskubectl get pods -A -owide登录后复制
虽然现在已经有两个 master 了,但是对外还是只能有一个入口的,所以还得要一个负载均衡器,如果一个 master 挂了,会自动切到另外一个 master 节点。
12)部署 Nginx+Keepalived 高可用负载均衡器
1、安装 Nginx 和 Keepalived
# 在两个master节点上执行yum install nginx keepalived -y登录后复制
2、Nginx 配置
在两个 master 节点配置
cat > /etc/nginx/nginx.conf << "EOF"user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules5 * * * * rsync -avz root@192.168.0.113:/opt/nfsdata/* /opt/nfsdata/登录后复制
【温馨提示】crontab 定时同步数据不太好,可以使用rsync+inotify做数据实时同步,这里篇幅有点长了,先不讲,如果后面有时间会出一篇单独文章来讲。
6)创建 nfs provisioner 和持久化存储 SC
【温馨提示】这里跟我之前的文章有点不同,之前的方式也不适用新版本。
GitHub 地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
helm 部署 nfs-subdir-external-provisioner
1、添加 helm 仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/登录后复制
2、helm 安装 nfs provisioner
【温馨提示】默认镜像是无法访问的,这里使用 dockerhub 搜索到的镜像willdockerhub/nfs-subdir-external-provisioner:v4.0.2,还有就是 StorageClass 不分命名空间,所有在所有命名空间下都可以使用。
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --namespace=nfs-provisioner \ --create-namespace \ --set image.repository=willdockerhub/nfs-subdir-external-provisioner \ --set image.tag=v4.0.2 \ --set replicaCount=2 \ --set storageClass.name=nfs-client \ --set storageClass.defaultClass=true \ --set nfs.server=192.168.0.120 \ --set nfs.path=/opt/nfsdata登录后复制
【温馨提示】上面 nfs.server 设置为 VIP,可实现高可用。
3、查看
kubectl get pods,deploy,sc -n nfs-provisioner登录后复制
7)部署 Harbor(Https 方式)
1、创建 Namespace
kubectl create ns harbor登录后复制
2、创建证书秘钥
kubectl create secret tls myharbor.com --key myharbor.com.key --cert myharbor.com.crt -n harbor kubectl get secret myharbor.com -n harbor登录后复制
3、添加 Chart 库
helm repo add harbor https://helm.goharbor.io登录后复制
4、通过 helm 安装 harbor
helm install myharbor --namespace harbor harbor/harbor \ --set expose.ingress.hosts.core=myharbor.com \ --set expose.ingress.hosts.notary=notary.myharbor.com \ --set-string expose.ingress.annotations.'nginx\.org/client-max-body-size'="1024m" \ --set expose.tls.secretName=myharbor.com \ --set persistence.persistentVolumeClaim.registry.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.jobservice.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.database.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.redis.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.trivy.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.chartmuseum.storageClass=nfs-client \ --set persistence.enabled=true \ --set externalURL=https://myharbor.com \ --set harborAdminPassword=Harbor12345登录后复制
这里稍等一段时间在查看资源状态
kubectl get ingress,svc,pods,pvc -n harbor登录后复制
5、ingress 没有 ADDRESS 问题解决
【分析】,发现"error: endpoints “default-http-backend” not found"
cat << EOF > default-http-backend.yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: default-http-backend labels: app: default-http-backend namespace: harbor spec: replicas: 1 selector: matchLabels: app: default-http-backend template: metadata: labels: app: default-http-backend spec: terminationGracePeriodSeconds: 60 containers: - name: default-http-backend # Any image is permissible as long as: # 1. It serves a 404 page at / # 2. It serves 200 on a /healthz endpoint image: registry.cn-hangzhou.aliyuncs.com/google_containers/defaultbackend:1.4 # image: gcr.io/google_containers/defaultbackend:1.4 livenessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP initialDelaySeconds: 30 timeoutSeconds: 5 ports: - containerPort: 8080 resources: limits: cpu: 10m memory: 20Mi requests: cpu: 10m memory: 20Mi --- apiVersion: v1 kind: Service metadata: name: default-http-backend namespace: harbor labels: app: default-http-backend spec: ports: - port: 80 targetPort: 8080 selector: app: default-http-backend EOF kubectl apply -f default-http-backend.yaml登录后复制
6、卸载重新部署
# 卸载 helm uninstall myharbor -n harbor kubectl get pvc -n harbor| awk 'NR!=1{print $1}' | xargs kubectl delete pvc -n harbor # 部署 helm install myharbor --namespace harbor harbor/harbor \ --set expose.ingress.hosts.core=myharbor.com \ --set expose.ingress.hosts.notary=notary.myharbor.com \ --set-string expose.ingress.annotations.'nginx\.org/client-max-body-size'="1024m" \ --set expose.tls.secretName=myharbor.com \ --set persistence.persistentVolumeClaim.registry.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.jobservice.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.database.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.redis.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.trivy.storageClass=nfs-client \ --set persistence.persistentVolumeClaim.chartmuseum.storageClass=nfs-client \ --set persistence.enabled=true \ --set externalURL=https://myharbor.com \ --set harborAdminPassword=Harbor12345登录后复制
5、访问 harbor
https://myharbor.com
账号/密码:admin/Harbor12345
6、harbor 常见操作
【1】创建项目 bigdata
【2】配置私有仓库
在文件/etc/docker/daemon.json添加如下内容:
"insecure-registries":["https://myharbor.com"]登录后复制
重启 docker
systemctl restart docker登录后复制
【3】服务器上登录 harbor
docker login https://myharbor.com #账号/密码:admin/Harbor12345登录后复制
【4】打标签并把镜像上传到 harbor
docker tag rancher/pause:3.6 myharbor.com/bigdata/pause:3.6 docker push myharbor.com/bigdata/pause:3.6登录后复制
7、修改 containerd 配置
以前使用 docker-engine 的时候,只需要修改/etc/docker/daemon.json 就行,但是新版的 k8s 已经使用 containerd 了,所以这里需要做相关配置,要不然 containerd 会失败。证书(ca.crt)可以在页面上下载:
创建域名目录
mkdir /etc/containerd/myharbor.com cp ca.crt /etc/containerd/myharbor.com/登录后复制
配置文件:/etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry] config_path = "" [plugins."io.containerd.grpc.v1.cri".registry.auths] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."myharbor.com".tls] ca_file = "/etc/containerd/myharbor.com/ca.crt" [plugins."io.containerd.grpc.v1.cri".registry.configs."myharbor.com".auth] username = "admin" password = "Harbor12345" [plugins."io.containerd.grpc.v1.cri".registry.headers] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."myharbor.com"] endpoint = ["https://myharbor.com"]登录后复制
重启 containerd
#重新加载配置 systemctl daemon-reload #重启containerd systemctl restart containerd登录后复制
简单使用
# 把docker换成crictl 就行,命令都差不多 crictl pull myharbor.com/bigdata/mysql:5.7.38登录后复制
执行 crictl 报如下错误的解决办法
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead. ERRO[0000] unable to determine image API version: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or directory"登录后复制
这个报错是 docker 的报错,这里没使用,所以这个错误不影响使用,但是还是解决好点,解决方法如下:
cat <<EOF> /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF登录后复制
再次拉取镜像
crictl pull myharbor.com/bigdata/mysql:5.7.38登录后复制
Kubernetes(k8s)最新版最完整版基础环境部署+master 高可用实现详细步骤就到这里了,有疑问的小伙伴欢迎给我留言哦~
以上就是详解 K8S 高可用部署,超详细!的详细内容,更多请关注本网内其它相关文章!