镜像下载、域名解析、时间同步请点击 阿里云开源镜像站
yum -y install wgetmv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bakwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum clean allyum makecache
# 查看防火墙状态firewall-cmd --state# 临时停止防火墙systemctl stop firewalld.service# 禁止防火墙开机启动systemctl disable firewalld.service
# 查看selinux状态getenforce# 临时关闭selinuxsetenforce 0# 永久关闭selinuxsed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 临时关闭swapswapoff -a# 永久关闭swapsed -i.bak '/swap/s/^/#/' /etc/fstab# 查看free -g
加载所需内核模块
cat <<EOF> /etc/modules-load.d/k8s.confbr_netfilterEOFcat <<EOF> /etc/modules-load.d/containerd.confoverlaybr_netfilterEOFmodprobe overlaymodprobe br_netfilter
设置必需的 sysctl 参数,允许iptables检查桥接流量,这些参数在重新启动后仍然存在
cat <<EOF> /etc/sysctl.d/99-kubernetes-cri.confnet.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1net.bridge.bridge-nf-call-ip6tables = 1EOF# 应用 sysctl 参数而无需重新启动sudo sysctl --system
不开启ipvs将会使用iptables进行数据包转发,但是效率低,所以推荐开通ipvs,使用
cat <<EOF> /etc/sysconfig/modules/ipvs.modules#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4EOF# 加载模块chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4# 安装了ipset软件包yum install ipset -y# 安装管理工具ipvsadmyum install ipvsadm -y
yum install chrony -ysystemctl enable chronydsystemctl start chronyd[root@master ~]# chronyc sources210 Number of sources = 4MS Name/IP address Stratum Poll Reach LastRx Last sample===============================================================================^- ntp.wdc1.us.leaseweb.net 2 9 201 329 -8125us[-8125us] +/- 264ms^- ntp5.flashdance.cx 2 9 373 189 -43ms[ -43ms] +/- 223ms^+ time.cloudflare.com 3 8 377 197 +38ms[ +38ms] +/- 121ms^* 119.28.183.184 2 8 155 30m -8460us[ -13ms] +/- 67ms[root@master ~]# date2022年 03月 26日 星期六 15:11:32 CST
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 查看最新版本yum list containerd --showduplicates | sort -ryum install containerd -y# 安装了`containerd.io-1.5.11-3.1.el7.x86_64`containerd config default > /etc/containerd/config.tomlsystemctl start containerdsystemctl enable containerd
配置
# 修改cgroups为systemdsed -i 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml# 修改基础设施镜像sed -i 's#sandbox_image = "k8s.gcr.io/pause:3.5"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"#' /etc/containerd/config.tomlsystemctl daemon-reloadsystemctl restart containerd
安装 CRI 客户端 crictl
选择版本 https://github.com/kubernetes-sigs/cri-tools/releases/
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.23.0/crictl-v1.23.0-linux-amd64.tar.gztar zxvf crictl-v1.23.0-linux-amd64.tar.gz -C /usr/local/bincat <<EOF> /etc/crictl.yamlruntime-endpoint: unix:///run/containerd/containerd.sockimage-endpoint: unix:///run/containerd/containerd.socktimeout: 10debug: falseEOF# 验证是否可用crictl pull nginx:alpinecrictl imagescrictl rmi nginx:alpine
修改hostname
# master节点hostnamectl set-hostname master# node1节点hostnamectl set-hostname node1# node2节点hostnamectl set-hostname node2
添加hosts
cat <<EOF> /etc/hosts192.168.4.27 master192.168.4.28 node1192.168.4.29 node2EOF
添加kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
然后安装 kubeadm、kubelet、kubectl
# 查看版本,最新版 1.23.5-0yum list kubeadm --showduplicates | sort -ryum install -y kubelet-1.23.5-0 kubectl-1.23.5-0 kubeadm-1.23.5-0[root@master ~]# kubeadm versionkubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:57:37Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
修改kubelet配置
cat <<EOF> /etc/sysconfig/kubeletKUBELET_KUBEADM_ARGS="--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"EOF
启动kubelet服务,并设置开机自启
systemctl start kubeletsystemctl enable kubelet
1. 通过配置文件初始化:
kubeadm config print init-defaults > kubeadm.yaml修改为cat <<EOF> kubeadm.yamlapiVersion: kubeadm.k8s.io/v1beta3bootstrapTokens:- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authenticationkind: InitConfigurationlocalAPIEndpoint:advertiseAddress: 192.168.4.27 # apiserver 节点内网IPbindPort: 6443nodeRegistration:criSocket: /run/containerd/containerd.sock # 修改为containerdimagePullPolicy: IfNotPresentname: mastertaints:- effect: NoSchedulekey: node-role.kubernetes.io/master---apiServer:timeoutForControlPlane: 4m0sapiVersion: kubeadm.k8s.io/v1beta3certificatesDir: /etc/kubernetes/pkiclusterName: kubernetescontrollerManager: {}dns:type: CoreDNS # dns类型 type: CoreDNSetcd:local:dataDir: /var/lib/etcdimageRepository: registry.aliyuncs.com/google_containers # 修改这个镜像能下载kind: ClusterConfigurationkubernetesVersion: 1.23.5 # k8s版本networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12scheduler: {}---apiVersion: kubeproxy.config.k8s.io/v1alpha1kind: KubeProxyConfigurationmode: ipvs # kube-proxy 模式EOFkubeadm init --config kubeadm.yaml
2. 直接初始化:
kube-proxy 模式是 iptables,可以通过kubectl edit configmap kube-proxy -n kube-system修改
kubeadm init \--kubernetes-version v1.23.5 \--apiserver-advertise-address 192.168.4.27 \--control-plane-endpoint master \--image-repository registry.aliyuncs.com/google_containers \--pod-network-cidr 10.244.0.0/16 \--cri-socket /run/containerd/containerd.sock
如果您的网络运行在192.168..,需要将 pod-network-cidr 设置为10.0.0.0/16;
如果您的网络是10.0..使用192.168.0.0/16,此时使用calico网络(如果设置错了部署calico 网络插件后coredns也运行不起来,会报错coredns Failed to list *v1.Endpoints,该错误解决办法参考https://blog.csdn.net/u011663005/article/details/87937800):
复制config文件
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join master:6443 --token f6e3hv.uk6ctfgehstt92jw \--discovery-token-ca-cert-hash sha256:9962caed607e31de7b93732347c1ac681f216c290e6b35f91f3f5d67cd12cbcf
mkdir -p /root/i && cd /root/i# 下载curl https://docs.projectcalico.org/manifests/calico.yaml -o /root/i/calico.yaml查看一下版本`v3.22.2`,如果不是替换不生效# 修改镜像sed -i 's#docker.io/calico/cni:v3.22.2#registry.cn-shanghai.aliyuncs.com/wanfei/cni:v3.22.2#' /root/i/calico.yamlsed -i 's#docker.io/calico/pod2daemon-flexvol:v3.22.2#registry.cn-shanghai.aliyuncs.com/wanfei/pod2daemon-flexvol:v3.22.2#' /root/i/calico.yamlsed -i 's#docker.io/calico/node:v3.22.2#registry.cn-shanghai.aliyuncs.com/wanfei/node:v3.22.2#' /root/i/calico.yamlsed -i 's#docker.io/calico/kube-controllers:v3.22.2#registry.cn-shanghai.aliyuncs.com/wanfei/kube-controllers:v3.22.2#' /root/i/calico.yaml# 执行kubectl apply -f /root/i/calico.yaml
等几分钟
[root@master i]# kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEcalico-kube-controllers-57845f44bb-tpvbr 1/1 Running 0 79scalico-node-fpfxj 1/1 Running 0 79scalico-node-qcvqx 1/1 Running 0 79scalico-node-r4gsf 1/1 Running 0 79scoredns-6d8c4cb4d-7bclr 1/1 Running 0 29mcoredns-6d8c4cb4d-djwxf 1/1 Running 0 29metcd-master 1/1 Running 0 29mkube-apiserver-master 1/1 Running 0 29mkube-controller-manager-master 1/1 Running 0 29mkube-proxy-pjkmd 1/1 Running 0 7m35skube-proxy-snb84 1/1 Running 0 7m46skube-proxy-tp7wm 1/1 Running 0 29mkube-scheduler-master 1/1 Running 0 29m[root@master i]# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster Ready control-plane,master 29m v1.23.5node1 Ready <none> 8m4s v1.23.5node2 Ready <none> 7m53s v1.23.5
yum -y install nfs-utils rpcbind#分配权限mkdir /nfsdata && chmod 666 /nfsdata && chown nfsnobody /nfsdata# 配置挂载cat <<EOF> /etc/exports/nfsdata *(rw,no_root_squash,no_all_squash,sync)EOF# 启动systemctl start rpcbind.servicesystemctl enable rpcbind.servicesystemctl start nfs.servicesystemctl enable nfs.service
如果不安装,使用StorageClass的nfs-client 的自动配置程序,我们也叫它 Provisioner所在的node节点就会一直ContainerCreating
[root@master nfs-client]# kubectl get pods -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnfs-client-provisioner-798cfd7476-zrndd 0/1 ContainerCreating 0 3m53s <none> node1 <none> <none>
安装
yum -y install nfs-utils rpcbindsystemctl start rpcbind.servicesystemctl enable rpcbind.servicesystemctl start nfs.servicesystemctl enable nfs.service[root@node1 ~]# showmount -e 192.168.4.27Export list for 192.168.4.27:/nfsdata *
设置StorageClass,自动生成PV
nfs-rbac.yaml
cat <<EOF> nfs-rbac.yamlapiVersion: v1kind: ServiceAccountmetadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default #根据实际环境设定namespace,下面类同---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: nfs-client-provisioner-runnerrules:- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"]---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:name: run-nfs-client-provisionersubjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: defaultroleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io---kind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: defaultrules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]---kind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:name: leader-locking-nfs-client-provisionersubjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: defaultroleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.ioEOF
nfs-storage.yaml
cat <<EOF> nfs-storage.yamlapiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: nfs-storageprovisioner: nfs-storage #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致parameters:archiveOnDelete: "true"reclaimPolicy: RetainEOF
nfs-provisioner.yaml
cat <<EOF> nfs-provisioner.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default #与RBAC文件中的namespace保持一致spec:replicas: 1selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisioner#image: quay.io/external_storage/nfs-client-provisioner:latest#这里特别注意,在k8s-1.20以后版本中使用上面提供的包,并不好用,这里我折腾了好久,才解决,后来在官方的github上,别人提的问题中建议使用下面这个包才解决的,我这里是下载后,传到我自已的仓库里#easzlab/nfs-subdir-external-provisioner:v4.0.2image: registry.cn-shanghai.aliyuncs.com/wanfei/nfs-subdir-external-provisioner:v4.0.2volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: nfs-storage #provisioner名称,请确保该名称与 nfs-StorageClass.yaml文件中的provisioner名称保持一致- name: NFS_SERVERvalue: 192.168.4.27 #NFS Server IP地址- name: NFS_PATHvalue: "/nfsdata" #NFS挂载卷volumes:- name: nfs-client-rootnfs:server: 192.168.4.27 #NFS Server IP地址path: "/nfsdata" #NFS 挂载卷EOF
安装
kubectl apply -f .[root@master nfs-client]# kubectl get pods | grep nfs-clientnfs-client-provisioner-777fbf8b55-2ptbm 1/1 Running 0 34s
设置默认的StorageClass(有default)
kubectl patch storageclass nfs-storage -p '{ "metadata" : { "annotations" :{"storageclass.kubernetes.io/is-default-class": "true"}}}'[root@master ~]# kubectl get sc | grep nfs-storagenfs-storage (default) nfs-storage Retain Immediate false 71s# 取消default,值为"false"kubectl patch storageclass nfs-storage -p '{ "metadata" : { "annotations" :{"storageclass.kubernetes.io/is-default-class": "false"}}}'
参考 https://blog.csdn.net/m0_48898914/article/details/121752973
下载地址 https://github.com/helm/helm/releases
[root@master helm]# wget https://get.helm.sh/helm-v3.8.1-linux-amd64.tar.gz
服务器下载速度太慢,可以科学上网下载好了上传到服务器,安装lrzsz https://blog.csdn.net/qq_22356995/article/details/104071562
解压
[root@master helm]# tar -xvf helm-v3.8.1-linux-amd64.tar.gzlinux-amd64/linux-amd64/helmlinux-amd64/README.mdlinux-amd64/LICENSE
将helm移到/usr/local/bin目录
[root@master helm]# mv linux-amd64/helm /usr/local/bin[root@master helm]# helm versionversion.BuildInfo{Version:"v3.8.1", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}
helm repo add apphub https://apphub.aliyuncs.comhelm repo add stable https://charts.helm.sh/stablehelm repo add bitnami https://charts.bitnami.com/bitnamihelm repo update# 例如搜索redis chart[root@master helm]# helm search repo redisNAME CHART VERSION APP VERSION DESCRIPTIONapphub/prometheus-redis-exporter 3.2.2 1.3.4 Prometheus exporter for Redis metricsapphub/redis 10.5.3 5.0.7 Open source, advanced key-value store. It is of...apphub/redis-cache 0.5.0 4.0.12-alpine A pure in-memory redis cache, using statefulset...apphub/redis-ha 4.3.3 5.0.6 Highly available Kubernetes implementation of R...apphub/redis-operator 1.0.0 Redis Operator provides high availability redis...apphub/redispapa 0.0.1 0.0.1 利用redis的info信息对redis的使用情况进行监控的一...bitnami/redis 16.6.0 6.2.6 Redis(TM) is an open source, advanced key-value...bitnami/redis-cluster 7.4.1 6.2.6 Redis(TM) is an open source, scalable, distribu...stable/prometheus-redis-exporter 3.5.1 1.3.4 DEPRECATED Prometheus exporter for Redis metricsstable/redis 10.5.7 5.0.7 DEPRECATED Open source, advanced key-value stor...stable/redis-ha 4.4.6 5.0.6 DEPRECATED - Highly available Kubernetes implem...stable/sensu 0.2.5 0.28 DEPRECATED Sensu monitoring framework backed by...apphub/codis 3.2 3.2 A Helm chart for Codis
本文转自:https://blog.csdn.net/qq_38983728/article/details/123755691
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号