kubeadmin安装k8s集群

目录

[一 、环境部署](#一 、环境部署)

1、服务器规划

2、环境准备

二、所有节点安装docker

1、配置yum源,安装docker

2、配置daemon.json文件

[三、所有节点安装kubeadm、kubelet 和kubectl](#三、所有节点安装kubeadm、kubelet 和kubectl)

四、部署k8s集群

1、查看初始化需要的镜像

2、导入镜像

3、初始化kubeadm

[3.1 方法一:通过修改配置文件初始化](#3.1 方法一:通过修改配置文件初始化)

[3.2 方法二:命令行](#3.2 方法二:命令行)

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

1、部署flannel

六、安装dashboard

1、所有节点安装dashboard

[七 安装Harbor私有仓库](#七 安装Harbor私有仓库)

[1、harbor 节点环境准备](#1、harbor 节点环境准备)

[2、安装 Harbor](#2、安装 Harbor)

3、生成证书

4、登录测试

[4.1 浏览器登录](#4.1 浏览器登录)

[4.2 在任意node接点上登录](#4.2 在任意node接点上登录)

5、上传镜像

八、发布服务

1、发布服务

2、测试

[2.1 访问测试](#2.1 访问测试)

九、内核参数优化


一 、环境部署

1、服务器规划

node01和node02的操作与master01的操作一致

角色 ip 服务
master(2c/4G ,cpu核心数要求大于2) 192.168.19.101 docker,kubeadm,kubelet,kubectl,flannel
node01( 2c /2G) 192.168.19.3 docker,kubeadm,kubelet,kubectl,flannel
node02 (2c/2G) 192.168.19.4 docker,kubeadm,kubelet,kubectl,flannel
Harbor 节点(hub.com) 192.168.19.5 docker ,docker-Compose,harbor-offline-v1.2.2

2、环境准备

复制代码
#关闭firewalld防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
 
#清空iptables 规则(不关闭则报错)
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
 
#关闭swap分区(不关闭则报错)
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
 
#加载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
复制代码
#各自节点修改主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

#所有节点修改/etc/hosts文件
cat >> /etc/hosts << EOF
192.168.19.101 master01
192.168.19.3 node01
192.168.19.4 node02
EOF

#所有节点调整内核参数
cat > /etc/sysctl.d/kubernetes.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  

二、所有节点安装docker

1、配置yum源,安装docker

复制代码
#安装docker 需要在线源.需要把官方自带的yum 源启用
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
 
第一个安装的是依赖包
第二个安装的是docker中的源
第三个安装的是社区版的docker

2、配置daemon.json文件

复制代码
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://自己的地址.mirror.aliyuncs.com"],   #指向阿里源
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"                                           #这四行是日志大小
  }
}
EOF

registry-mirrors:配置镜像加速地址

  • 阿里云的镜像加速: 控制台---->在产品与镜像服务搜索容器镜像服务----> 镜像工具------>镜像加速器

exec-opts:

  • 使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。

log-driver ; log-opts

  • 日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。

使用systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。

日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。

复制代码
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 
 
docker info | grep "Cgroup Driver"

三、所有节点安装kubeadm、kubelet 和kubectl

复制代码
#配置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
 
#下载
yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
 
#设置开机自启kubelet
systemctl enable kubelet.service

四、部署k8s集群

1、查看初始化需要的镜像

复制代码
#查看初始化需要的镜像
kubeadm config images list

2、导入镜像

复制代码
#在master节点上传v1.20.11.zip压缩包至/opt目录
unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done
 
#复制镜像和脚本到node节点,并在node节点上执行脚本加载镜像文件
scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt

3、初始化kubeadm

3.1 方法一:通过修改配置文件初始化

复制代码
#master节点上执行
 
#生成kubeadm的配置模板
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
 
cd /opt/
 
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.19.101     #指定master节点的IP地址
13   bindPort: 6443
......
34 kubernetesVersion: v1.20.11           #指定kubernetes版本号
35 networking:
36   dnsDomain: cluster.local
37   podSubnet: "10.244.0.0/16"
#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
38   serviceeSubnet: 10.96.0.0/16        #指定service网段
39 scheduler: {}
#末尾再添加以下内容
---
apiVersion: kubeproxy.config.k8s.io/vlalphal
kind: KubeProxyConfiguration
mode: ipvs                                      #把默认的kube-proxy调度方式改为ipvs模式
 
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
#--experimental-upload-certs  参数可以在后续执行加入节点时自动分发证书文件,K8S
V1.16版本开始替换为 --upload-certs
#tee kubeadm-init.log 用以输出日志
 
 
//查看 kubeadm-init 日志
less kubeadm-init.log
 
//kubernetes配置文件目录
ls /etc/kubernetes/
 
//存放ca等证书和密码的目录
ls /etc/kubernetes/pki

3.2 方法二:命令行

复制代码
kubeadm init \
--apiserver-advertise-address=192.168.19.101 \
--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 这个参数 
复制代码
//设定kubectl
kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 "$HOME/.kube/config" 的路径进行加载。

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
//如果 kubectl get cs 发现集群不健康,更改以下两个文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml 
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=192.168.10.19		#修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成192.168.19.101(有两处)
#- --port=0					# 搜索port=0,把这一行注释掉

systemctl restart kubelet

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

1、部署flannel

复制代码
#所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
ls /opt/flannel.tar
cd /opt
docker load < flannel.tar
 
 
#在 master 节点创建 flannel 资源
kubectl apply -f kube-flannel.yml 
复制代码
//在master节点查看节点状态
kubectl get nodes
复制代码
//测试 pod 资源创建
kubectl create deployment nginx --image=nginx

kubectl get pods -o wide
复制代码
//暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get svc
复制代码
//测试访问
curl http://node01:31883

六、安装dashboard

1、所有节点安装dashboard

复制代码
//在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8s
vim recommended.yaml
#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
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
	
kubectl apply -f recommended.yaml
复制代码
#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
复制代码
#使用输出的token登录Dashboard
https://NodeIP:30001

七 安装Harbor私有仓库

1、harbor 节点环境准备

复制代码
#修改主机名
hostnamectl set-hostname hub.com
 
 
#关闭firewalld防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
 
#所有节点加上主机名映射
echo '192.168.19.5 hub.com' >> /etc/hosts
cat >> /etc/hosts << EOF
192.168.19.101 master01
192.168.19.3 node01
192.168.19.4 node02
EOF
复制代码
#harboe节点安装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
复制代码
#所有 node 节点都修改 docker 配置文件,加上私有仓库配置
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://自己的地址.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["https://hub.com"]
}
EOF
 
systemctl daemon-reload
systemctl restart docker


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

systemctl daemon-reload
systemctl restart docker

2、安装 Harbor

复制代码
#上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
 
tar zxvf harbor-offline-installer-v1.2.2.tgz
cd harbor/
vim harbor.cfg
5//  hostname = hub.com
9//  ui_url_protocol = https
24// ssl_cert = /data/cert/server.crt
25// ssl_cert_key = /data/cert/server.key
59// harbor_admin_password = Harbor12345

3、生成证书

复制代码
mkdir -p /data/cert
cd /data/cert
#生成私钥
openssl genrsa -des3 -out server.key 2048
输入两遍密码:123456
 
#生成证书签名请求文件
openssl req -new -key server.key -out server.csr
输入私钥密码:123456
输入国家名:CN
输入省名:BJ
输入市名:BJ
输入组织名:YH
输入机构名:YH
输入域名:hub.com
输入管理员邮箱:admin@yh.com
其它全部直接回车
 
#查看证书
cat server.csr
 
#备份私钥
cp server.key server.key.org
 
 
#清除私钥密码
openssl rsa -in server.key.org -out server.key
输入私钥密码:123456
 
#签名证书
openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
 
chmod +x /data/cert/*
 
cd /opt/harbor/
./install.sh

4、登录测试

4.1 浏览器登录

复制代码
浏览器访问:https://hub.com ,或则和https://192.168.19.5
添加例外 -> 确认安全例外
用户名:admin
密码:Harbor12345

4.2 在任意node接点上登录

复制代码
docker login -u admin -p Harbor12345 https://hub.com

5、上传镜像

复制代码
docker tag nginx:latest hub.com/library/nginx:v1
docker push hub.com/library/nginx:v1
 
docker tag nginx:latest hub.com/library/test_nginx:test
docker push hub.com/library/test_nginx:test
 
 
#登录浏览器刷新查看
https://192.168.19.5
复制代码
//在master节点上删除之前创建的nginx资源
kubectl delete deployment nginx

kubectl create deployment nginx-deployment --image=hub.kgc.com/library/nginx:v1 --port=80 --replicas=3

kubectl expose deployment nginx-deployment --port=30000 --target-port=80

kubectl get svc,pods

八、发布服务

1、发布服务

复制代码
#先查看资源名
 kubectl  get all
kubectl  expose  deploy nginx-deployment --port=30000 --target-port=80

curl 10.96.45.197:30000

2、测试

2.1 访问测试

复制代码
使用ipvsadm 查看策略
#安装工具
yum install ipvsadm -y
 
#查看策略
ipvsadm -Ln 
 
 
kubectl  get pods -o wide

九、内核参数优化

复制代码
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0                                    #禁止使用 swap 空间,只有当系统内存不足(OOM)时才允许使用它
vm.overcommit_memory=1                            #不检查物理内存是否够用
vm.panic_on_oom=0                                #开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963                            #指定最大文件句柄数
fs.nr_open=52706963                                #仅4.4以上版本支持
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF 
相关推荐
小肥君9 小时前
docker无法连接GPU资源解决方案
docker·容器·eureka
liux35289 小时前
K8s存储卷全解析:PV/PVC/StorageClass 关系
kubernetes
江华森12 小时前
从零搭建 Kubernetes 集群并部署 Kuboard v3 管理面板 —— 国内环境完整实战教程
容器·kubernetes
友莘居士13 小时前
KingbaseES Docker速查表
运维·docker·容器
小肥君14 小时前
docker镜像配置
运维·docker·容器
某林21216 小时前
Isaac Lab (v2.3.2) Docker 本地化部署与底层排障全解析
运维·docker·容器·架构·iassc
iDao技术魔方18 小时前
WSL 配 GPU 用 Docker 的折腾指南(2026 年版)
运维·docker·容器
步步为营DotNet18 小时前
.NET 11 中 Native AOT 在云原生场景下的深度剖析与实践
云原生·.net
跳动的世界线18 小时前
WSL 2 + Docker 本地全栈开发环境配置指南
运维·docker·容器