赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Kubernetes 主要由以下几个核心组件组成:
etcd:保存了整个集群的状态;
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
kube-scheduler:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
kubelet:负责维持容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;
Container runtime:负责镜像管理以及 Pod 和容器的真正运行(CRI),默认的容器运行时为 Docker;
kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡。
# 生成秘钥对,一路回车
ssh-keygen -t rsa
#跨主机免密码认证
ssh-copy-id root@远程主机ip地址
# 脚本方式ssh-copy-id root@远程主机,1,2,3,4,5为主机ip最后识别
for i in 1 2 3 4 5
do
ssh-copy-id root@10.100.100.$i
done
#临时关闭
swapoff -a
# 永久关闭,或者注释掉swap分区那一行
sed -i 's/.*swap.*/#&/' /etc/fstab
#内核参数调整
cat >> /etc/sysctl.d/k8s.conf << EOF vm.swappiness=0 EOF
sysctl -p /etc/sysctl.d/k8s.conf
#修改网卡 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 sysctl -p #启用内核模块 modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 cut -f1 -d " " /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4 vim /etc/sysconfig/modules/ipvs.modules modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4
systemctl stop firewalld
systemctl disable firewalld
#卸载 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce-cli \ docker-ce \ containerd.io #清理存储 rm -rf /etc/docker rm -rf /run/docker rm -rf /var/lib/dockershim rm -rf /var/lib/docker
yum -y install wget && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce-23.0.3 docker-ce-cli-23.0.3 # 配置daemon.json文件 # 方案一如果有准备好的daemon.json文件,可以直接cp过去 cp /home/ludpadmin/k8s/daemon.json /etc/docker # 方案二 配置cgroup驱动及镜像下载加速器: cat > /etc/docker/daemon.json << EOF { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": [ "http://node48.*.*.*", "https://registry.aliyuncs.com", "https://mirrors.aliyun.com", "https://rsbud4vc.mirror.aliyuncs.com", "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://dockerhub.azk8s.cn", "http://hub-mirror.c.163.com" ], "insecure-registries":["node48.*.*.*"] } EOF #添加"insecure-registries":["harbor-node:port"],解决docker 链接仓库tls验证问题 systemctl daemon-reload systemctl enable docker systemctl start docker #重启 systemctl restart docker÷ systemctl status docker docker info|grep systemd #如果已经安装了cri-docker并启动,重新安装新版本docker需要重新启动cri-docker,不然读取的版本信息依然是重装前的
上传服务器,copy到执行路径
cp /home/ludpadmin/k8s/docker-compose-linux-x86_64 /usr/bin/docker-compose
给docker-compose 可执行权限
chmod a+x /usr/bin/docker-compose
查看docker-compose版本
docker-compose -version
# Docker Compose version v2.26.1
下载软件
mkdir /data/{softs,server} -p && cd /data/softs
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
解压软件
tar -zxvf harbor-offline-installer-v2.5.0.tgz -C /data/server/
cd /data/server/harbor/
加载镜像
docker load < harbor.v2.5.0.tar.gz
docker images
备份配置
cp harbor.yml.tmpl harbor.yml
修改配置 [root@kubernetes-register /data/server/harbor]# vim harbor.yml.tmpl # 修改主机名 hostname: harbor-node http: port: 80 #https: 注释ssl相关的部分 # port: 443 # certificate: /your/certificate/path # private_key: /your/private/key/path # 修改harbor的登录密码 harbor_admin_password: Harbor12345 # 设定harbor的数据存储目录 data_volume: /data/server/harbor/data
配置harbor
./prepare
启动harbor
./install.sh
检查效果
docker-compose ps
定制启动文件
定制服务启动文件 cat >> /etc/systemd/system/harbor.service << EOF [Unit] Description=Harbor After=docker.service systemd-networkd.service systemd-resolved.service Requires=docker.service Documentation=http://github.com/vmware/harbor [Service] Type=simple Restart=on-failure RestartSec=5 #需要注意harbor的安装位置,需要改成自己环境harbor的部署位置 ExecStart=/usr/bin/docker-compose --file /data2/server/harbor/docker-compose.yml up ExecStop=/usr/bin/docker-compose --file /data2/server/harbor/docker-compose.yml down [Install] WantedBy=multi-user.target EOF
重新加载文件,启动服务
加载服务配置文件
systemctl daemon-reload
启动服务
systemctl start harbor
检查状态
systemctl status harbor
设置开机自启动
systemctl enable harbor
harbor仓库定制
浏览器访问域名,用户名: admin, 密码:Harbor123456
创建仓库k8s,权限为公开的
harbor仓库测试
#登录仓库
# docker login harbor-node:port -u admin
Password: # 输入登录密码 A12345678a
#下载镜像
docker pull busybox
#定制镜像标签
docker tag busybox harbor-node/k8s/busybox:v0.1
#推送镜像
docker push harbor-node/k8s/busybox:v0.1
# 下载安装最新版的cri-dockerd wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz tar xf cri-dockerd-0.3.8.amd64.tgz rm -rf /usr/bin/cri-dockerd cp /home/ludpadmin/k8s/cri-dockerd /usr/bin/ rm -rf cri-dockerd cri-dockerd-0.3.8.amd64.tgz # 配置启动项 cat > /etc/systemd/system/cri-docker.service<<EOF [Unit] Description=CRI Interface for Docker Application Container Engine Documentation=https://docs.mirantis.com After=network-online.target firewalld.service docker.service Wants=network-online.target Requires=cri-docker.socket [Service] Type=notify # ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// # 指定用作 Pod 的基础容器的容器镜像(“pause 镜像”) ExecStart=/usr/bin/cri-dockerd --pod-infra-containerimage=node48.it.leap.com/k8s/pause:3.9 --container-runtime-endpoint fd:// ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target EOF cat > /etc/systemd/system/cri-docker.socket <<EOF [Unit] Description=CRI Docker Socket for the API PartOf=cri-docker.service [Socket] ListenStream=%t/cri-dockerd.sock SocketMode=0660 SocketUser=root SocketGroup=docker [Install] WantedBy=sockets.target EOF systemctl daemon-reload systemctl enable cri-docker systemctl start cri-docker #一定详细检查cri-docker启动状态 systemctl status cri-docker
images=$(kubeadm config images list --kubernetes-version=1.27.2| awk -F “/” ‘{print $NF}’)
定制阿里云的关于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 clean all yum makecache #安装kubeadm kubelet kubectl #强烈建议指定版本安装,最新版本可能存在适配问题 yum install kubeadm-1.27.2 kubelet-1.27.2 kubectl-1.27.2 -y # 配置 cgroup 驱动与docker一致 cat > /etc/sysconfig/kubelet <<EOF KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" EOF systemctl enable kubelet
检查镜像文件列表 kubeadm config images list 获取镜像文件 images=$(kubeadm config images list --kubernetes-version=1.27.2 | awk -F "/" '{print $NF}') for i in ${images} do docker pull registry.aliyuncs.com/google_containers/$i docker tag registry.aliyuncs.com/google_containers/$i harbor-node:port/k8s/$i docker push harbor-node:port/k8s/$i docker rmi registry.aliyuncs.com/google_containers/$i done images=$(docker images ) for i in ${images} do echo $i done
环境初始化命令
kubeadm init --kubernetes-version=1.27.2 \
--apiserver-advertise-address=master节点ip \
--image-repository=harbor-node:port/k8s \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=Swap \
--cri-socket=unix:///var/run/cri-dockerd.sock
kubeadm join 10.0.0.5:6443 --token kt58np.djd3youoqb0bnz4r \
--discovery-token-ca-cert-hash sha256:37a3924142dc6d57eac2714e539c174ee3b0cda723746ada2464ac9e8a2091ce
接下来执行剩余的初始化步骤
可以考虑先修改/etc/kubernetes/admin.conf
中ip为对应的hostnameserver: https://node33-8.lu.leo.com:6443
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#以下如果不执行,会报forbidden的错误
#这可能是由于config没有更新导致的,/root/.kube/config是从/etc/kubernetes/admin.conf复制而来。复制来之后,是需要执行更新kubeconfig命令的。
export KUBECONFIG=$HOME/.kube/config
chmod g-r $HOME/.kube/config
注意,如果初始化成功,并且执行了上述操作,执行kubeadm reset
的时候需要删除一些配置,执行rm -rf $HOME/.kube
,不然重置初始化会报错
下载[caclico.yaml](https://github.com/projectcalico/calico/tree/v3.27.0/manifests)
#执行命令安装
kubectl apply -f caclico.yaml
#获取添加节点命令
kubeadm token create --print-join-command
#返回
#kubeadm join 10.12*.3*.4*:6443 --token vwgqxt.40f18gdrnmd7bbkd --discovery-token-ca-cert-hash sha256:023bc38b73bf67074a94d5c07c5eb1bdb03edb8087261a61f3553d9f75a72090
#在各个节点执行
kubeadm join 10.12*.3*.*:6443 --token vwgqxt.40f18gdrnmd7bbkd --discovery-token-ca-cert-hash sha256:023bc38b73bf67074a94d5c07c5eb1bdb03edb8087261a61f3553d9f75a72090 --cri-socket=unix:///var/run/cri-dockerd.sock
安装过程需要注意版本使用,每次操作都需要检查操作结果,尤其是启动服务的服务状态检查,可以减少很多麻烦。
如果起服务有问题,可以查看具体的日志分析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。