【Kubernetes部署篇】Kubeadm方式搭建K8s集群 1.26.0版本

一、集群规划及架构

官方文档:

二进制下载地址

环境规划:

  • pod网段:10.244.0.0/16
  • service网段:10.10.0.0/16
  • 注意: pod和service网段不可冲突,如果冲突会导致K8S集群安装失败。
  • 容器运行时本次使用containerd。
主机名IP地址操作系统
master-116.32.15.200CentOS7.8
node-116.32.15.201CentOS7.8
node-216.32.15.202CentOS7.8

二、系统初始化准备(所有节点同步操作)

1、关闭防火墙

systemctl disable firewalld --now
setenforce 0
sed  -i -r 's/SELINUX=[ep].*/SELINUX=disabled/g' /etc/selinux/config

2、配置域名解析

cat  >> /etc/hosts << EOF
16.32.15.200 master-1
16.32.15.201 node-1
16.32.15.202 node-2
EOF

在指定主机上面修改主机名

hostnamectl set-hostname master-1 && bash
hostnamectl set-hostname node-1 && bash
hostnamectl set-hostname node-2 && bash

3、配置服务器时间保持一致

yum -y install ntpdate
ntpdate ntp1.aliyun.com

添加定时同步 每天凌晨1点自动同步时间

echo "0 1 * * * ntpdate ntp1.aliyun.com" >> /var/spool/cron/root
crontab -l

4、禁用swap交换分区(kubernetes强制要求禁用)

swapoff --all

禁止开机自启动swap交换分区

sed -i -r '/swap/ s/^/#/' /etc/fstab

5、修改Linux内核参数,添加网桥过滤器和地址转发功能

cat >> /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl -p /etc/sysctl.d/kubernetes.conf

加载网桥过滤器模块

modprobe br_netfilter
lsmod | grep br_netfilter # 验证是否生效

6、配置ipvs功能

在kubernetes中Service有两种代理模型,一种是基于iptables的,一种是基于ipvs,两者对比ipvs的性能要高,如果想要使用ipvs模型,需要手动载入ipvs模块

yum -y install ipset ipvsadm

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4  
EOF

chmod +x /etc/sysconfig/modules/ipvs.modules 
# 执行脚本
/etc/sysconfig/modules/ipvs.modules

# 验证ipvs模块
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

7、安装Docker容器组件

注意:Docker用来下载镜像、Dockerfile构建镜像等操作,和Containerd不冲突。

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache

# yum-utils软件用于提供yum-config-manager程序
yum install -y yum-utils

# 使用yum-config-manager创建docker阿里存储库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 -y

Docker配置加速源:

mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": ["https://aoewjvel.mirror.aliyuncs.com"]
}
EOF

# 启动docker并设置开机自启
systemctl enable docker --now
systemctl status docker

8、重启服务器 可略过

reboot

三、安装并配置Containerd容器运行时

三台服务器同时操作

1、安装containerd

yum -y install containerd.io-1.6.6

2、生成containerd配置文件,并修改配置文件

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

修改配置文件,主要修改以下配置:

vim /etc/containerd/config.toml

SystemdCgroup = true
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

3、启动containerd

systemctl enable containerd  --now

4、添加 crictl 工具的配置文件

crictl 是一个命令行工具,用于与 CRI(Container Runtime Interface)兼容的容器运行时进行交互。在 Kubernetes 中,Kubelet 使用 CRI 接口与容器运行时进行通信,而 crictl 工具则可以用于直接与容器运行时进行交互。

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
  • runtime-endpoint:指定容器运行时的地址
  • image-endpoint:指定镜像仓库的地址,即containerd所使用的镜像仓库的地址。

5、配置containerd镜像加速器

指定加速器目录信息:

vim /etc/containerd/config.toml

config_path = "/etc/containerd/certs.d"

配置加速信息:

mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml

[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
  capabilities = ["pull"]

重启containerd

systemctl restart containerd

四、安装kubeadm(所有节点同步操作)

1、配置国内yum源,一键安装 kubeadm、kubelet、kubectl

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=0
EOF

yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0

2、kubeadm将使用kubelet服务以容器方式部署kubernetes的主要服务,所以需要先启动kubelet服务

systemctl enable kubelet.service --now

五、初始化集群

在master-1主机上进行操作

1、配置容器运行时

crictl config runtime-endpoint unix:///run/containerd/containerd.sock

2、生成初始化默认配置文件

kubeadm config print init-defaults > kubeadm.yaml

我们根据自己需求进行修改默认配置文件,我主要更改了一下配置如下:

  • advertiseAddress:更改为master的IP地址
  • criSocket:指定容器运行时
  • imageRepository:配置国内加速源地址
  • podSubnet:pod网段地址
  • serviceSubnet:services网段地址
  • 末尾添加了指定使用ipvs,开启systemd
  • nodeRegistration.name:改为当前主机名称

最终初始化配置文件如下:

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 16.32.15.200
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: master-1
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.26.0
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

3、进行初始化

kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

初始化成功后输出如下内容:

[init] Using Kubernetes version: v1.26.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local node] and IPs [10.96.0.1 16.32.15.200]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [localhost node] and IPs [16.32.15.200 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [localhost node] and IPs [16.32.15.200 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 12.003782 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node node as control-plane by adding the labels: [node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]
[mark-control-plane] Marking the node node as control-plane by adding the taints [node-role.kubernetes.io/control-plane:NoSchedule]
[bootstrap-token] Using token: abcdef.0123456789abcdef
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 16.32.15.200:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:02dc7cc7702f9814d01f9a4d5957da3053e74adcc2f583415e516a4b81fb37bc

4、配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

验证使用可以使用 kubectl 命令

kubectl get nodes

5、查看镜像,咱们使用containerd拉取的镜像,使用docker images命令是查看不到镜像的。需要使用ctr命令,如下:

ctr -n k8s.io images list
crictl images
  • -n 指明名称空间

六、Node节点添加到集群

在两台node节点进行操

1、赋值初始化输出的token信息,在两台node节点执行

kubeadm join 16.32.15.200:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:6839bcc102c7ab089554871dd1a8f3d4261e1482ff13eafdf32fc092ebaf9f7e

如果忘记可以使用以下命令创建并查看token:

kubeadm token create --print-join-command

成功加入到集群如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WcReqrzj-1682478646677)(D:\MD归档文档\IMG\image-20230425151533713.png)]

2、给两台node节点打上标签

master-1主机上执行

kubectl label nodes node-1 node-role.kubernetes.io/work=work
kubectl label nodes node-2 node-role.kubernetes.io/work=work

七、安装网络组件Calico

Calico在线文档地址:

Calico.yaml下载地址:

1、上传calico.yaml文件到服务器中,下面提供calico.yaml文件内容:

在master主机执行

kubectl apply -f  calico.yaml

2、查看集群状态 && 查看自带Pod状态

kubectl get nodes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wScfqriS-1682478646680)(D:\MD归档文档\IMG\image-20230426104418539.png)]

3、查看组件状态 是否为 Running状态 如下图:

kubectl get pods -n kube-system

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ugY0UxIX-1682478646681)(D:\MD归档文档\IMG\image-20230426104559318.png)]

八、测试CoreDNS解析可用性

1、下载busybox:1.28镜像

ctr -n k8s.io images pull docker.io/library/busybox:1.28

2、测试coredns

kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh

If you don't see a command prompt, try pressing enter.

/ # nslookup kubernetes.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
  • 注意:busybox要用指定的1.28版本,不能用最新版本,最新版本,nslookup会解析不到dns和ip

九、拓展

1、ctr和crictl命令具体区别

ctr和crictl都是用于管理容器运行时的命令行工具,但它们的具体区别如下:

  • ctr是由Docker开发的,而crictl是由Kubernetes开发的。

  • ctr支持多种容器运行时,包括Docker、containerd、CRI-O等,而crictl只支持CRI(Container Runtime Interface)兼容的容器运行时,如CRI-O、containerd等。

  • ctr提供了更多的功能,如镜像管理、网络管理、卷管理等,而crictl只提供了基本的容器管理功能,如容器创建、删除、启动、停止等。

  • ctr的命令更加直观和易用,而crictl的命令更加符合Kubernetes的设计理念和规范。

综上所述,ctr和crictl都是优秀的容器管理工具,选择哪一个取决于具体的使用场景和需求。

2、calico多网卡情况配置

可能会有一些情况,一台服务器上面有多个网卡,但是只有其中一个网卡可以通外网,这种情况下需要添加一些配置,来指定网卡,如下命令是指定ens33网卡,当然也可以使用正则表达式来表示。

 - name: IP_AUTODETECTION_METHOD
   value: "interface=ens33"

在这里插入图片描述
重新执行生效:

kubectl apply -f calico.yaml
<think>我们正在安装DockerKubernetes和Harbor。注意,Harbor通常是通过下载其离线安装包并使用docker-compose安装的,但我们可以先安装DockerKubernetes,然后使用Docker来运行Harbor。由于用户要求使用yum安装,所以我们将使用yum来安装DockerKubernetes(kubelet, kubeadm, kubectl),而Harbor则需要额外步骤。步骤:1.设置yum仓库(确保包含DockerKubernetes的包)2.安装Docker3.安装Kuberneteskubeadm,kubelet,kubectl)4.配置Docker(特别是如果使用Kubernetes,需要注意cgroup驱动等设置)5.启动并启用服务6.安装Harbor(需要下载Harbor的安装包,然后配置并安装)注意:Harbor是一个容器镜像仓库,它本身需要以容器方式运行,所以我们需要先安装Docker。根据引用[1]和[2]中的部分配置,我们可以参考一些设置,但需要根据实际情况调整。具体步骤:一、设置yum仓库首先,我们需要确保有DockerKubernetes的yum源。1.1对于Docker,我们可以添加Docker官方仓库或使用系统自带仓库(如果系统仓库中有的话)。这里我们使用Docker官方仓库:```sudoyuminstall -y yum-utilssudoyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo```1.2对于Kubernetes,我们可以添加Kubernetes官方仓库。但注意引用[1]中使用了本地仓库(baseurl=http://192.168.1.100/repo/),我们这里使用官方仓库,但为了稳定,建议使用阿里云的镜像。创建kubernetes.repo文件:```cat <<EOF >/etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF```二、安装Docker2.1安装Docker CE(社区版):```sudo yum install-ydocker-cedocker-ce-clicontainerd.io```2.2配置Docker(参考引用[2]中的OPTIONS,但我们需要根据实际情况调整):编辑/etc/docker/daemon.json(如果不存在则创建):```{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver":"json-file","log-opts":{"max-size":"100m"},"storage-driver":"overlay2","insecure-registries": ["harbor.superred.com","10.10.3.104:8123","10.10.3.104"]}```注意:这里添加了insecure-registries,以便Harbor可以使用(如果Harbor使用HTTP而不是HTTPS)。请根据实际Harbor的地址和端口修改。2.3启动Docker并设置开机启动:```sudo systemctl enabledockersudosystemctlstart docker```三、安装Kuberneteskubeadm, kubelet, kubectl)3.1安装指定版本(例如1.26.0,但建议安装较新稳定版本,这里以1.26.0为例):```sudoyuminstall -y kubelet-1.26.0kubeadm-1.26.0 kubectl-1.26.0```3.2设置kubelet开机启动(但先不启动,等待kubeadm初始化):```sudosystemctlenable kubelet```四、配置Kubernetes(在kubeadm init之前,需要确保系统设置)4.1关闭swap(Kubernetes要求):```sudoswapoff-a#永久关闭:注释/etc/fstab中的swap行```4.2设置系统参数(网络转发、br_netfilter模块):```cat <<EOF |sudo tee/etc/modules-load.d/k8s.confoverlaybr_netfilterEOFsudo modprobeoverlaysudomodprobe br_netfiltercat<<EOF| sudotee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables =1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1EOFsudo sysctl --system```4.3初始化Kubernetes集群(在master节点上):```sudo kubeadminit --pod-network-cidr=10.244.0.0/16```注意:这里使用了Flannel网络的默认CIDR,如果使用其他网络插件请调整。初始化完成后,按照提示执行以下命令(普通用户):```mkdir-p$HOME/.kubesudocp -i /etc/kubernetes/admin.conf$HOME/.kube/configsudo chown $(id -u):$(id-g) $HOME/.kube/config```4.4安装网络插件(例如Flannel):```kubectl apply-fhttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml```五、安装Harbor5.1下载Harbor离线安装包(从HarborGitHub Release页面下载):```wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgztar xvf harbor-offline-installer-v2.5.3.tgzcd harbor```5.2配置Harbor(编辑harbor.yml):修改hostname为你的主机名或IP(例如:harbor.superred.com或10.10.3.104)修改http端口(如果需要,默认80)或https(如果需要,默认443)并配置证书(如果不需要HTTPS,则注释掉https部分,使用HTTP)。注意:我们之前已经在Docker中配置了insecure-registries,所以这里可以使用HTTP。将harbor.yml中的hostname改为你规划的地址,例如:hostname:harbor.superred.com同时,修改http的端口(如果需要):port:8123注意:如果使用非80端口,比如8123,那么之后访问Harbor需要带上端口。5.3执行安装脚本(需要安装docker-compose):先安装docker-compose:sudo curl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)" -o /usr/local/bin/docker-composesudochmod+x/usr/local/bin/docker-compose然后安装Harbor:sudo./install.sh5.4安装完成后,可以通过浏览器访问Harbor(使用配置的hostname和端口),默认管理员用户admin,密码Harbor12345。注意:以上步骤是一个概述,具体操作时可能会根据系统环境有所不同。特别是Kubernetes的安装,如果是在多节点集群中,还需要将工作节点加入集群。由于步骤较多,建议分步执行并检查每一步是否成功。相关问题:1.在安装Kubernetes时,如何解决依赖冲突?2.如何配置Harbor使用HTTPS?3. Kubernetes集群初始化失败常见原因有哪些?4.如何将工作节点加入Kubernetes集群?</think>### 安装 DockerKubernetes 和 Harbor 的完整指南 #### 一、准备工作 1. **配置 YUM 仓库** ```bash # 备份原有仓库 mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak # 添加 Docker 仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 添加 Kubernetes 仓库 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 EOF yum clean all yum makecache ``` #### 二、安装 Docker ```bash # 安装 Docker CE yum install -y docker-ce docker-ce-cli containerd.io # 配置 Docker(关键步骤) cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "insecure-registries": ["harbor.yourdomain.com", "10.10.3.104:8123"] } EOF # 启动 Docker systemctl enable docker --now ``` > **注意**:`insecure-registries` 需替换为您的 Harbor 域名/IP[^2]。 #### 三、安装 Kubernetes ```bash # 安装指定版本 yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0 ipset ipvsadm # 禁用 SELinux 和 Swap setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config swapoff -a sed -i '/ swap / s/^/#/' /etc/fstab # 加载内核模块 modprobe overlay modprobe br_netfilter # 启动 kubelet systemctl enable kubelet --now ``` #### 四、初始化 Kubernetes 集群 ```bash # 仅 Master 节点执行 kubeadm init --pod-network-cidr=10.244.0.0/16 # 配置 kubectl mkdir -p $HOME/.kube cp /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # 安装网络插件 (Flannel) kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml ``` #### 五、安装 Harbor ```bash # 下载 Harbor 离线包 wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz tar xvf harbor-offline-installer-*.tgz cd harbor # 生成 SSL 证书(可选) openssl req -x509 -newkey rsa:4096 -nodes -days 365 \ -keyout harbor.key -out harbor.crt \ -subj "/CN=harbor.yourdomain.com" # 修改配置文件 harbor.yml vi harbor.yml ``` ```yaml hostname: harbor.yourdomain.com # 替换为实际域名 http: port: 8080 # 避免与 Docker 端口冲突 https: # 启用 HTTPS port: 443 certificate: /path/to/harbor.crt private_key: /path/to/harbor.key data_volume: /data/harbor # 数据存储路径 ``` ```bash # 启动 Harbor ./install.sh ``` #### 六、验证安装 1. **Docker**: ```bash docker run hello-world ``` 2. **Kubernetes**: ```bash kubectl get nodes ``` 3. **Harbor**: 访问 `https://harbor.yourdomain.com`,使用默认账号 `admin/Harbor12345` > **关键提示**: > 1. 所有节点需配置相同的 `insecure-registries`[^2] > 2. Harbor 域名需加入所有节点的 `/etc/hosts` > 3. 生产环境务必使用 HTTPS 和有效证书 --- ### 相关问题 1. Kubernetes 初始化失败时如何重置集群状态? 2. 如何配置 Harbor 与 Kubernetes 之间的 TLS 证书信任? 3. Docker 的 `cgroupdriver` 与 Kubernetes 不兼容会导致什么问题? 4. 如何通过 Helm 在 Kubernetes部署 Harbor? [^1]: Kubernetes 官方推荐使用 `systemd` 作为容器运行时驱动 [^2]: Docker 需明确声明非安全仓库地址才能推送镜像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇的海马体

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值