K8s 1.20.0安装周边组件及兼容性

安装metrics-server

由于kubeadm默认不安装metrics-server

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
#在metrics-server-deployment.yaml 中添加如下command部分
#...code
		image: k8s.gcr.io/metrics-server/metrics-server:v0.4.1
        imagePullPolicy: IfNotPresent
        command:
          - /metrics-server
          - --kubelet-preferred-address-types=InternalIP
          - --kubelet-insecure-tls
 
kubectl apply -f components.yaml
[root@k8s-master metrics]# kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8s-master   261m         6%     976Mi           12%
k8s-node1    76m          1%     445Mi           5%
k8s-node2    70m          1%     435Mi           5%

在这里插入图片描述

创建持久存储卷

安装nfs(192.168.16.69)

  1. 如果没有关闭防火墙,请打开端口111、2049,或者关闭防火墙
#firewalld
firewall-cmd  --permanent    --add-port=111/tcp
firewall-cmd  --permanent    --add-port=111/udp
firewall-cmd  --permanent    --add-port=2049/tcp
firewall-cmd  --permanent    --add-port=2049/udp
#iptables
vi /etc/sysconfig/iptables
#添加一下内容
-A INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 2049 -j ACCEPT
service iptables restart
  1. 安装 NFS 服务器所需的软件包
yum install -y nfs-utils
  1. 编辑exports文件,允许指定网段客户端挂载
mkdir -p /data/nfs
vi /etc/exports
#添加
/data/nfs/ 192.168.16.0/24(rw,all_squash,anonuid=0,anongid=0)
  1. 启动nfs服务

先为rpcbind和nfs做开机启动:(必须先启动rpcbind服务),然后分别启动rpcbind和nfs服务:

systemctl enable rpcbind.service
systemctl enable nfs-server.service

systemctl start rpcbind.service
systemctl start nfs-server.service

#使配置生效
exportfs -r
  1. 验证
exportfs
#可以查看到已经ok
/data/nfs/ 192.168.16.0/24
  1. 自行验证挂载

安装helm v3

  1. 下载并安装helm:
curl -SLO https://get.helm.sh/helm-v3.4.2-linux-amd64.tar.gz
tar -zxvf helm-v3.4.2-linux-amd64.tar.gz
chmod +x linux-amd64/bin/helm && cp linux-amd64/bin/helm /usr/local/bin/
  1. 由于helm没有自带仓库镜像,拉取镜像
#墙内网络使用国内镜像
helm repo add stable https://apphub.aliyuncs.com/stable

安装ingress-controller

ingress-controller选择很多,由于搭建在私有环境,我选择ingress-nginx,也是k8s官方支持的controller,并且目前不是生产阶段,先不考虑lb部署方式,直接使用节点IP。上一步已经安装helm,那就简单粗暴,一把梭,使用helm直接部署

  1. 使用helm部署ingress-controller
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx
  1. 设置ingress-nginx-controller的externalIPs,更新…
  clusterIP: 10.100.9.184
  clusterIPs:
    - 10.100.9.184
  type: LoadBalancer
  externalIPs:
    - 192.168.16.136
    - 192.168.16.137
    - 192.168.16.131
  sessionAffinity: None
  externalTrafficPolicy: Cluster
  1. 修改controller deploy的image,我是把镜像先拉取到了harbor中 在这里插入图片描述

  2. 验证成功 在这里插入图片描述

dashboard改为ingress对外暴露

  1. 创建ingress yaml文件ingress-nginx-kubernetes-dashboard.yaml

这个地方的networking.k8s.io/v1beta1为之前版本,会有告警,暂时先忽略,等后期理解加深了在回来修复这里

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx-kubernetes-dashboard
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: "nginx"
    # 开启use-regex,启用path的正则匹配
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    #nginx.ingress.kubernetes.io/secure-backends: "true" //好像是版本0.20.0发布后被删除,请使用下面这行
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  tls:
  - hosts:
    - "k8s.local"
    - "*.k8s.local"
    secretName: kubernetes-dashboard-certs
  rules:
  - host: dashboard.k8s.local
    http:
      paths:
      - path: /
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443

  1. 执行部署
kubectl apply -f ingress-nginx-kubernetes-dashboard.yaml
  1. 修改系统hosts文件,增加一行
192.168.16.131 dashboard.k8s.local
  1. 使用域名访问验证

本来就是私有环境,自签证书默认使用k8s创建的证书,如有需要请提前修改

在这里插入图片描述

兼容性问题

  1. 动态创建nfs类存储卷 不兼容,可以手动创建pv挂载

兼容问题解决

从k8s 1.14开始,k8s实现了csi规范,之前版本都能使用原先的nfs client正常动态创建pv,但是k8s1.20版本开始,pod中创建pv报错,应该是只保留了csi规范。所以,我们需要在k8s集群安装nfs driver支持。

安装csi-driver-nfs

  1. 使用helm安装csi-driver-nfs
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install --name csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system
#如果网络有问题,可以直接下载https://github.com/kubernetes-csi/csi-driver-nfs,cd charts/latest && helm install csi-driver-nfs ./csi-driver-nfs -n kube-system
  1. 创建storageClass
vim storageclass-nfs.yaml
#storageclass-nfs.yaml内容
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi-69
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.16.69
  share: /data/nfs/pv
reclaimPolicy: Retain  # only retain is supported
volumeBindingMode: Immediate
mountOptions:
  - hard
  - nfsvers=4.1
kubectl apply -f storageclass-nfs.yaml
  1. 创建pvc验证动态创建pv
vim pvc-nfs-csi-dynamic.yaml
#pvc-nfs-csi-dynamic.yaml内容
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs-dynamic
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
  storageClassName: nfs-csi-69
kubectl apply -f pvc-nfs-csi-dynamic.yaml
#验证
[root@k8s-master nfs-server]# kubectl apply -f pvc-nfs-csi-dynamic.yaml
persistentvolumeclaim/pvc-nfs-dynamic created
[root@k8s-master nfs-serjjver]# kubectl get pv|grep nfs-csi
pvc-3ba895b7-4083-40fe-afa6-5c4c90299f49   1Mi        RWX            Retain           Bound    default/pvc-nfs-dynamic   nfs-csi              18s