提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


基本概念

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
关闭swap
#临时关闭
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

docker环境清理(如果需要清理docker环境,更换版本)

#卸载
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

安装Docker v23.0.3

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,不然读取的版本信息依然是重装前的

安装docker-compose (Docker Compose version v2.26.1)

下载docker-compose

上传服务器,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

harbor仓库操作(自选一个节点)

下载软件
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

# 下载安装最新版的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

K8s集群初始化(主节点)

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网络插件的配置(3.27.0)

下载[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

总结

安装过程需要注意版本使用,每次操作都需要检查操作结果,尤其是启动服务的服务状态检查,可以减少很多麻烦。
如果起服务有问题,可以查看具体的日志分析

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐