【kubernetes】集群的 kubeadm 安装及 部署 harbor 仓库

目录

前言

一、环境部署

二、部署 K8S 集群

1、所有节点设备安装docker

2、所有节点安装kubeadm,kubelet和kubectl

3、查看初始化镜像并执行脚本加载镜像文件

4、初始化 kubeadm

4.1 方法一(yaml配置文件完成初始化)

4.2 方法二(kubeadm命令初始化)

5、设定 kubectl

6、设定 集群健康

7、所有节点部署网络插件 flannel

8、node 节点 加入集群

9、在 master 节点查看节点状态

10、测试

10.1 测试 pod 资源创建

10.2 暴露端口提供服务

10.3 浏览器测试访问

10.4 扩展为3个副本

三、部署 Dashboard

1、什么是 Dashboard

2、安装 Dashboard

3、使用输出的token登录Dashboard

四、部署 Harbor 私有仓库

1、安装 docker

2、所有 node 节点都修改 docker 配置文件,加上私有仓库配置

3、安装 Harbor

3.1 安装 docker-compose

3.2 修改 harbor 配置文件

3.3 生成证书和私钥文件

3.4 安装 harbor

4、 在本地使用浏览器访问

5、 在一个node节点上登录harbor并上传镜像

6、创建三个 nginx pod

7、对内访问

8、对外访问

五、内核参数优化方案

六、流程总结


前言

Kubernetes作为当今最流行的容器编排平台之一,其部署和管理对于现代云原生应用的开发和运维至关重要。为了简化Kubernetes集群的安装和部署过程,Kubernetes官方提供了kubeadm工具,这是一个简单易用的工具,可帮助用户快速搭建Kubernetes集群

本文将详细介绍如何使用kubeadm工具来安装和配置Kubernetes集群,帮助快速上手并开始使用Kubernetes进行容器编排和管理

在本文中,我们将从安装kubeadm工具开始,逐步指导你完成Kubernetes集群的初始化、节点加入、网络配置等关键步骤。通过本文的学习,将能够快速掌握使用kubeadm部署Kubernetes集群的方法,并为你的应用提供一个稳定可靠的运行环境

希望本文能够帮助你顺利搭建自己的Kubernetes集群,并加深对Kubernetes的理解和应用

一、环境部署

服务器主机名IP地址主要软件

master 节点

master01172.16.12.10docker、kubeadm、kubelet、kubectl、flannel

node01 节点

node01172.16.12.11docker、kubeadm、kubelet、kubectl、flannel

node02 节点

node02172.16.12.12docker、kubeadm、kubelet、kubectl、flannel
harbor 节点hub.dh.com172.16.12.15docker、docker-compose、harbor-offline-v1.2.2

 (1)所有设备关闭防火墙,清空iptables规则

systemctl disable --now firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

(2)所有设备关闭selinux

setenforce 0    #临时关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config   #永久关闭

(3)所有设备关闭swap 

swapoff -a    #临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab    #永久关闭

(4)修改所有设备的主机名

[root@localhost ~]#hostnamectl set-hostname master
[root@localhost ~]#bash

[root@localhost ~]#hostnamectl set-hostname node01
[root@localhost ~]#bash
 
[root@localhost ~]#hostnamectl set-hostname node02
[root@localhost ~]#bash

[root@localhost ~]#hostnamectl set-hostname hub.dh.com
[root@localhost ~]#bash

(5) 所有设备修改本地的hosts文件

cat >> /etc/hosts << EOF
172.16.12.10 master
172.16.12.11 node01
172.16.12.12 node02
172.16.12.15 hub.dh.com
EOF

(7)所有设备调整内核参数

cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
sysctl --system     #重新加载系统的配置参数

 (8)所有设备加载 ip_vs 模块

#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

(9)所有设备实现时间同步

yum install ntpdate -y
ntpdate time.windows.com

大概步骤:

① 在所有节点上安装Docker和kubeadm

② 部署Kubernetes Master
③ 部署容器网络插件
④ 部署 Kubernetes Node,将节点加入Kubernetes集群中
⑤ 部署 Dashboard Web 页面,可视化查看Kubernetes资源
⑥ 部署 Harbor 私有仓库,存放镜像资源

二、部署 K8S 集群

1、所有节点设备安装docker

master、node01、node02 节点上都需要以下操作

#安装docker服务相关软件
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],   #使用自己的阿里云镜像加速器
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

systemctl daemon-reload             #重新加载systemd服务
systemctl restart docker.service    #重启docker服务
systemctl enable docker.service     #开机自启docker服务

docker info | grep "Cgroup Driver"     #过滤得到"Cgroup Driver"详细信息
#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志

2、所有节点安装kubeadm,kubelet和kubectl

master、node01、node02 节点上都需要以下操作

#定义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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
#开机自启kubelet
systemctl enable kubelet.service
#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

3、查看初始化镜像并执行脚本加载镜像文件

(1)查看初始化需要的镜像

[root@master ~]#kubeadm config images list

(2)在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录

[root@master ~]#unzip v1.20.11.zip -d /opt/k8s
[root@master ~]#cd /opt/k8s/v1.20.11
#循环遍历当前目录下所有以 ".tar" 结尾的文件,并将它们作为镜像加载到 Docker 中
[root@master v1.20.11]#for i in $(ls *.tar); do docker load -i $i; done
#for i in $(ls *.tar); 对当前目录下所有以 ".tar" 结尾的文件执行循环操作
#do docker load -i $i; 对每个符合条件的文件执行 docker load 命令,从文件中加载镜像到 Docker 引擎中

(3)复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件

[root@master ~]#scp -r /opt/k8s root@node01:/opt
[root@master ~]#scp -r /opt/k8s root@node02:/opt
#在 node01 节点上执行脚本加载镜像文件
[root@node01 ~]#cd /opt/k8s/v1.20.11/
[root@node01 v1.20.11]#for i in $(ls *.tar); do docker load -i $i; done

#在 node02 节点上执行脚本加载镜像文件
[root@node02 ~]#cd /opt/k8s/v1.20.11/
[root@node02 v1.20.11]#for i in $(ls *.tar); do docker load -i $i; done

4、初始化 kubeadm

在 master 节点上完成初始化 kubeadm

4.1 方法一(yaml配置文件完成初始化)

#将 kubeadm 工具的初始化默认配置输出到指定的文件 /opt/kubeadm-config.yaml 中
[root@master ~]#kubeadm config print init-defaults > /opt/kubeadm-config.yaml
#kubeadm config print init-defaults  运行 kubeadm 命令来打印初始化集群时的默认配置。
#>  将命令的标准输出重定向到文件。
#/opt/kubeadm-config.yaml  指定输出的文件路径为 /opt/kubeadm-config.yaml,即将默认配置写入该文件中。
[root@master ~]#cd /opt/
[root@master opt]#vim kubeadm-config.yaml
……
localAPIEndpoint:
  advertiseAddress: 172.16.12.10         #第12行,指定master节点的IP地址
  bindPort: 6443
……
kubernetesVersion: v1.20.11				 #第34行,指定kubernetes版本号
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"	#第37行,指定pod网段,10.244.0.0/16用于匹配flannel默认网段
  serviceSubnet: 10.96.0.0/16		 #第38行,指定service网段
scheduler: {}

#末尾再添加以下内容
--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs									#把默认的kube-proxy调度方式改为ipvs模式

#使用指定的配置文件来初始化 Kubernetes 集群,并在此过程中将输出保存到屏幕和日志文件中
[root@master opt]#kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
#kubeadm init  运行 kubeadm 工具来初始化一个 Kubernetes 集群
#--config=kubeadm-config.yaml  使用名为 kubeadm-config.yaml 的配置文件进行初始化
#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,K8S V1.16版本开始替换为 --upload-certs
#| tee kubeadm-init.log  将命令的标准输出同时输出到屏幕上并写入文件 kubeadm-init.log 中

#查看 kubeadm-init 日志
[root@master opt]#less kubeadm-init.log

#查看kubernetes配置文件目录
[root@master opt]#ls /etc/kubernetes/

#查看存放ca等证书和密码的目录
[root@master opt]#ls /etc/kubernetes/pki        

4.2 方法二(kubeadm命令初始化)

[root@master opt]#kubeadm init \
--apiserver-advertise-address=192.168.10.19 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.11 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0
----------------------------------------------------------------------------------------
初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化
可选参数:
--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
--apiserver-bind-port:apiserver的监听端口,默认是6443
--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
--kubernetes-version:指定kubernetes版本
--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;
--service-cidr:service资源的网段
--service-dns-domain:service全域名的后缀,默认是cluster.local
--token-ttl:默认token的有效期为24小时,如果不想过期,可以加上 --token-ttl=0 这个参数
----------------------------------------------------------------------------------------
方法二初始化后需要修改 kube-proxy 的 configmap,开启 ipvs
kubectl edit cm kube-proxy -n=kube-system
修改mode: ipvs


提示以下信息表示初始化成功:
......
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 172.16.12.10:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:e2a8a04872bcbcf898678f979d15a66dd8260d55d295c06009da5120b892d397

5、设定 kubectl

kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载

[root@master ~]#mkdir -p $HOME/.kube
[root@master ~]#cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#将文件 $HOME/.kube/config 的所有权更改为当前用户及其用户组
[root@master ~]#chown $(id -u):$(id -g) $HOME/.kube/config
#$(id -u) 会返回当前用户的用户 ID,而 $(id -g) 会返回当前用户的用户组 ID

6、设定 集群健康

如果 kubectl get cs 发现集群不健康,需更改以下两个文件

[root@master ~]#vim /etc/kubernetes/manifests/kube-scheduler.yaml
# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=172.16.12.10  #修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成172.16.12.10(有两处)
#- --port=0                    # 搜索port=0,把这一行注释掉

[root@master ~]#vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=172.16.12.10  #修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成172.16.12.10(有两处)
#- --port=0                    # 搜索port=0,把这一行注释掉

[root@master ~]#systemctl restart kubelet   #重启 kubelet 服务

 修改完两个配置文件,重启 kubelet 服务后,再次查看集群状态,就是Healthy

7、所有节点部署网络插件 flannel

方法一:

master、node01、node02 节点上都需要以下操作

#所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
[root@master ~]#cd /opt
[root@master opt]#unzip kuadmin.zip   #解压

#加载 Docker 镜像到 Docker 引擎中
[root@master opt]#docker load -i flannel-cni-v1.2.0.tar 
[root@master opt]#docker load -i flannel-v0.22.2.tar 

#核对 当前 docker 镜像库中的 flannel-cni-plugin和flannel 版本
[root@master opt]#grep image kube-flannel.yml
[root@master opt]#docker images

#在 master 节点创建 flannel 资源
[root@master opt]#kubectl apply -f kube-flannel.yml 

方法二:

#需要等待很长的时间
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

8、node 节点 加入集群

在 node 节点上执行 kubeadm join 命令加入群集

#在master节点上查看kubeadm join的命令
[root@master opt]#cat kubeadm-init.log

#在所有node节点上执行
kubeadm join 172.16.12.10:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:e2a8a04872bcbcf898678f979d15a66dd8260d55d295c06009da5120b892d397

9、在 master 节点查看节点状态

#获取kubernetes集群中node节点信息
[root@master opt]#kubectl get nodes

#获取Kubernetes集群中kube-system命名空间下的所有Pods的信息
[root@master opt]#kubectl get pods -n kube-system

#获取位于kube-flannel命名空间中的所有Pods的信息
[root@master ~]#kubectl get pod -n kube-flannel
#获取位于kube-flannel命名空间中的所有Pods的详细信息
[root@master ~]#kubectl get pod -n kube-flannel -owide

10、测试

在 master 服务器上操作

10.1 测试 pod 资源创建

#在集群中创建一个名为"nginx"的部署,并使用Nginx镜像作为部署的容器
[root@master ~]#kubectl create deployment nginx --image=nginx
#获取当前命名空间中所有Pods的详细信息
[root@master ~]#kubectl get pods -o wide

10.2 暴露端口提供服务

#将名为"nginx"的部署创建为一个NodePort类型的服务,并将其暴露在集群的节点上,以便可以通过节点的IP地址和指定的端口访问该服务
[root@master ~]#kubectl expose deployment nginx --port=80 --type=NodePort
#获取当前命名空间中所有服务(Service)的信息
[root@master ~]#kubectl get svc

10.3 浏览器测试访问

http://node节点或master节点:30123  
即 http://172.16.12.11:30123 或 http://172.16.12.12:30123 或 http://172.16.12.10:30123

10.4 扩展为3个副本

#用于扩展名为 "nginx" 的 Deployment 实例的副本数量到 3
[root@master opt]#kubectl scale deployment nginx --replicas=3
[root@master opt]#kubectl get pods -o wide

三、部署 Dashboard

1、什么是 Dashboard

Dashboard(仪表板)是基于Web的Kubernetes用户界面

可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源

可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)

例如,可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息

2、安装 Dashboard

(1)分别在 所有node节点上操作,以 node1 为例

#将名为 dashboard.tar 的 Docker 镜像文件加载到 Docker 引擎中
[root@node01 opt]#docker load -i dashboard.tar
#将名为 metrics-scraper.tar 的 Docker 镜像文件加载到 Docker 引擎中
[root@node01 opt]#docker load -i metrics-scraper.tar 

#查看当前所有镜像
[root@node01 opt]#docker images

(2)在 master01 节点上操作

#上传 recommended.yaml 文件到 /opt/k8s 目录中
[root@master ~]#cd /opt/k8s

#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部
[root@master k8s]#vim recommended.yaml
……
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001      #添加
  type: NodePort           #添加
  selector:
    k8s-app: kubernetes-dashboard
……
[root@master k8s]#kubectl apply -f recommended.yaml
#kubectl apply 命令用于创建或更新 Kubernetes 资源对象,-f 参数用于指定要应用的 YAML 文件

#创建 service account 并绑定默认 cluster-admin 管理员集群角色
[root@master k8s]#kubectl create serviceaccount dashboard-admin -n kube-system
[root@master k8s]#kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

#获取"kube-system"命名空间中所有Secrets的列表,包括它们的名称、类型等信息
#Secrets通常用于存储敏感数据,如API密钥、密码等
[root@master k8s]#kubectl get secret -n kube-system

#"kube-system"命名空间中与"dashboard-admin"相关的Secret的详细信息
[root@master k8s]#kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
#kubectl -n kube-system get secret:这部分命令用于获取"kube-system"命名空间中所有Secret的列表
# | awk '/dashboard-admin/{print \$1}':这部分命令使用awk来过滤出包含"dashboard-admin"的Secret,并输出它们的名称

3、使用输出的token登录Dashboard

浏览器访问:https://NodeIP:30001

https://172.16.12.11:30001
https://172.16.12.12:30001

四、部署 Harbor 私有仓库

1、安装 docker

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
[root@harbor ~]#mkdir /etc/docker
[root@harbor ~]#cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],   #使用自己的阿里云镜像加速器
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["https://hub.dh.com"]
}
EOF

[root@harbor ~]#systemctl start docker
[root@harbor ~]#systemctl enable docker

 2、所有 node 节点都修改 docker 配置文件,加上私有仓库配置

master、node01、node02 节点上都需要以下操作

#所有 node 节点都修改 docker 配置文件,加上私有仓库配置
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["https://hub.dh.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

3、安装 Harbor

3.1 安装 docker-compose

#上传 docker-compose 文件到 /opt 目录
[root@harbor ~]#cd /opt
[root@harbor opt]#cp docker-compose /usr/local/bin/
[root@harbor opt]#chmod +x /usr/local/bin/docker-compose

3.2 修改 harbor 配置文件

#上传 harbor-offline-installer-v1.2.2.tgz 到 /opt 目录下
[root@harbor opt]#tar zxvf harbor-offline-installer-v1.2.2.tgz
[root@harbor opt]#cd harbor/
[root@harbor harbor]#vim harbor.cfg

3.3 生成证书和私钥文件

(1)生成私钥

#创建证书和密钥文件目录
[root@harbor ~]#mkdir -p /data/cert
[root@harbor ~]#cd /data/cert

#生成私钥
[root@harbor cert]#openssl genrsa -des3 -out server.key 2048
#输入两遍自定义密码,这里我输的是:123456

(2)生成证书签名请求文件 

#生成证书签名请求文件
[root@harbor cert]#openssl req -new -key server.key -out server.csr
输入私钥密码:123456
输入国家名:CN
输入省名:BJ
输入市名:BJ
输入组织名:DH
输入机构名:DH
输入域名:hub.dh.com
输入管理员邮箱:admin@dh.com
其它全部直接回车

(3)备份私钥

#备份私钥
[root@harbor cert]#cp server.key server.key.org

(4) 清除私钥密码

#清除私钥密码
[root@harbor cert]#openssl rsa -in server.key.org -out server.key
输入私钥密码:123456

(5)签名证书 

#签名证书
[root@harbor cert]#openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
[root@harbor cert]#chmod +x /data/cert/*

3.4 安装 harbor

[root@harbor ~]#vim /opt/harbor/docker-compose.yml 

version: '3'

[root@harbor ~]#cd /opt/harbor/
[root@harbor harbor]#./install.sh

4、 在本地使用浏览器访问

Linux端:
#客户端配置本地的/etc/hosts文件
cat >> /etc/hosts << EOF
172.16.12.15 hub.dh.com
EOF

Windows端:
#修改本地的hosts文件,路径:C:\Windows\System32\drivers\hosts
172.16.12.15 hub.dh.com
客户端浏览器访问:https://hub.dh.com

5、 在一个node节点上登录harbor并上传镜像

(1)登录 harbor 仓库

[root@node01 ~]#docker login -u admin -p Harbor12345 https://hub.dh.com

(2)上传镜像

#下载 nginx 镜像到本地docker中
[root@node01 ~]#docker pull nginx
#为该镜像添加新的标签
[root@node01 ~]#docker tag nginx:latest hub.dh.com/library/nginx:v1
#查看本地镜像
[root@node01 ~]#docker images
#上传至harbor仓库
[root@node01 ~]#docker push hub.dh.com/library/nginx:v1

浏览器登录到harbor仓库可查看到上传的镜像: 

6、创建三个 nginx pod

(1)先在master节点上删除之前创建的nginx资源

[root@master ~]#kubectl delete deployment nginx    #删除 nginx 资源
#获取当前命名空间中所有Pods的详细信息
[root@master ~]#kubectl get pods -o wide

(2)再使用 hub.dh.com/library/nginx:v1(harbor仓库中的镜像) 镜像创建三个nginx pod 

#在 Kubernetes 集群中创建一个名为 "nginx-deployment" 的部署,使用指定的镜像、端口和副本数量为3
[root@master ~]#kubectl create deployment nginx-deployment --image=hub.dh.com/library/nginx:v1 --port=80 --replicas=3
#将名为 "nginx-deployment" 的部署(deployment)暴露为一个 Kubernetes 服务(service)
[root@master ~]#kubectl expose deployment nginx-deployment --port=30000 --target-port=80

#获取当前命名空间中所有 Pods 和 service 的详细信息
[root@master ~]#kubectl get pod,svc -o wide

(3)安装 ipvs

[root@master ~]#yum install ipvsadm -y
[root@master ~]#ipvsadm -Ln

7、对内访问

k8s集群内部服务器可访问:

8、对外访问

[root@master ~]#kubectl edit svc nginx-deployment
type: NodePort             #第26行,把调度策略改成NodePort

#获取当前命名空间中所有服务(Service)的信息
[root@master ~]#kubectl get svc

浏览器访问:http://masterIP:32412 或 http://nodeIP:32412

如:172.16.12.10:32412、172.16.12.11:32412、172.16.12.12:32412

#将cluster-admin角色权限授予用户system:anonymous
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

五、内核参数优化方案

cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1    
#用于开启 Linux 桥接模块对 iptables 的调用。这对于在 Kubernetes 集群中使用网络插件(如 Calico)时是必需的
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
#这将 IPv4 的数据包转发功能设置为启用状态。当 Linux 主机用作路由器或者网络网关时,这是必需的。
net.ipv4.tcp_tw_recycle=0
#这个参数用于控制 TIME-WAIT 状态的 TCP 连接是否可以被重用。设置为 0 表示禁用 TCP TIME-WAIT 快速回收机制
vm.swappiness=0					
#禁止使用 swap 空间,只有当系统内存不足(OOM)时才允许使用它
vm.overcommit_memory=1			
#不检查物理内存是否够用,这个参数用于控制内存过度分配策略。设置为 1 表示关闭内存过度分配检查
vm.panic_on_oom=0				
#开启 OOM,这个参数用于控制当系统发生内存耗尽(OOM)时是否立即崩溃。设置为 0 表示不启用 OOM 紧急崩溃
fs.inotify.max_user_instances=8192
#用于配置 inotify 子系统的最大实例数。inotify 用于监视文件系统事件
fs.inotify.max_user_watches=1048576
#用于配置 inotify 子系统的最大监视数。inotify 用于监视文件系统事件
fs.file-max=52706963			
#指定最大文件句柄数
fs.nr_open=52706963				
#仅4.4以上版本支持
net.ipv6.conf.all.disable_ipv6=1   
#这个参数用于禁用 IPv6
net.netfilter.nf_conntrack_max=2310720   
# 这个参数用于配置 netfilter 连接跟踪表的最大大小
EOF

六、流程总结

  • 初始化节点设备
  • 所有节点安装docker容器,harbor建议安装旧版本docker容器
  • 所有节点安装kubeadm,kubelet和kubectl

# kubeadm:部署Kubernetes集群的工具,简化了集群的初始化过程
# kubelet:运行在每个节点上,管理该节点上的Pod和容器,与Master节点通信,执行Master节点下发的任务
# kubectl: 是K8s的命令行工具,用于与K8s集群进行交互,如创建、管理和监视K8s资源
# 注意:kubelet会优先启动

  • 部署k8s集群

① 在master节点安装组件镜像
② 初始化kubeadm、k8s集群
③ 授权kubetcl
④ 所有节点安装网络插件flannel
⑤ 将node节点加入集群

  • 部署Dashboard
  • 安装Harbor私有仓库

① 上传安装包和编排工具,编辑harbor配置文件
② 生成私钥证书签名请求文件、签发证书
③ 在node节点登录管理harbor
④ 创建pod实例实现对外访问

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值