鲲鹏920 搭建k8s集群并安装dashboard

1、环境配置:

注:master和所有node节点都要执行

//关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

//关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

//临时关闭 swap
swapoff -a

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system

2、安装时间同步服务器

注:master和所有node节点都要执行

yum install chrony -y
systemctl enable chronyd.service
systemctl start chronyd.service

//查看chrony状态
systemctl status chronyd.service chronyc sources
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-03-22 14:32:33 CST; 11min ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
 Main PID: 611 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─611 /usr/sbin/chronyd

Mar 22 14:32:33 localhost systemd[1]: Starting NTP client/server...
Mar 22 14:32:33 localhost chronyd[611]: chronyd version 3.4 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +... +DEBUG)
Mar 22 14:32:33 localhost chronyd[611]: Frequency -3.712 +/- 0.085 ppm read from /var/lib/chrony/drift
Mar 22 14:32:33 localhost systemd[1]: Started NTP client/server.
Mar 22 14:32:38 k8s-master chronyd[611]: Selected source 100.125.0.251

3、安装所需依赖:

注:master和所有node节点都要执行

yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp bash-completion yum-utils device-mapper-persistent-data lvm2 net-tools conntrack-tools vim libtool-ltdl

4、设置hostname

#设置每个机器自己的hostname
hostnamectl set-hostname xxx

eg:
作为主节点的服务器设置为:  hostnamectl set-hostname k8s-master
其余两台工作服务器  
第一台 :hostnamectl set-hostname node1
第一台 :hostnamectl set-hostname node2

之后让每台服务器都能找到master 设置host(每台服务器都执行)

echo "10.13.166.115  k8s-master" >> /etc/hosts  # 将IP 改为你master节点的IP

5、安装docker

注:master和所有node节点都要执行

sudo yum remove docker*
//配置repo
wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
export releasever=7
export basearch=aarch64

//安装Docker-CE
sudo yum makecache
sudo yum -y install docker-ce-3:24.0.2-1.el8.aarch64 --allowerasing    # --allowerasing 表示允许安装新的替换旧的

//配置Docker-CE
systemctl start docker
systemctl enable docker.service

如果以上操作报错:找不到对应的daocker版本可以执行以下操作进行查找

yum list docker-ce

6、安装kubeadm等组件

注:master和所有node节点都要执行

# 设置镜像源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 安装
yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0 --disableexcludes=kubernetes 

#启动
systemctl enable kubelet
systemctl start kubelet --now

7、初始化master:

在初始化之前就提前解决一下这个问题:

遇到问题(其他警告可以置之不理,但是涉及到网络插件的必须解决 ):

注意点:在其他节点也要执行 (比如加入work节点时要进行查看)

问题:
[WARNING FileExisting-tc]: tc not found in system path

解决:
dnf install -y iproute-tc

初始化

仅在master 执行 将 --apiserver-advertise-address=192.168.1.205 \ 其中的ip替换为master 的ip地址

重要: --pod-network-cidr=172.168.0.0/16 要根据集群的ip而定 从而避免ip冲突

kubeadm init \
--apiserver-advertise-address=192.168.1.205 \
--control-plane-endpoint=k8s-master \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=172.168.0.0/16

**取消初始化:(注意 这里不用执行哦,只有报错或者想重试才执行以下代码)**比如遇到上面的报错 解决后再重新初始化master节点

sudo kubeadm reset

rm -rf $HOME/.kube

rm -rf /var/lib/cni/
rm -rf /etc/cni/
ifconfig cni0 down
ip link delete cni0

在这里插入图片描述

执行完以上命令后 会 删除所有的容器 docker 以及 pod

详细信息:

执行完初始化后 会产生详细信息: (注意这里要将其记录下来,后面加入node节点会使用到)

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join k8s-master:6443 --token 02f7y1.k9dgww0wcobl0s9c \
    --discovery-token-ca-cert-hash sha256:07b802f242cfb73780d757e056978731a822fcc339ba4c9ee95afa5a64819090 \
    --control-plane 

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token 02f7y1.k9dgww0wcobl0s9c \
    --discovery-token-ca-cert-hash sha256:07b802f242cfb73780d757e056978731a822fcc339ba4c9ee95afa5a64819090 

之后在master节点执行(详细信息中内容)

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

稍等一下 查看结果:在这里插入图片描述

可以看到doredns 还没有启动 这两个需要安装 网络插件之后才会正式的running 起来 所以不要着急

8、部署容器网络插件:

注:仅在master节点执行

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

若拉取不到上面的文件 可以直接 copy 附录中的进行应用即可

遇到问题:

问题一:

coredns 的状态一直为 ContainerCreating
错误原因:查看该节点状态,发现缺少/run/flannel/subnet.env文件

kubectl describe pod coredns-6d8c4cb4d-drcgw -n kube-system
#logs 输出:
kubernetes installation and kube-dns: open /run/flannel/subnet.env: no such file or directory

解决方案:手动写入/run/flannel/subnet.env文件,再次查看为running

cat > /run/flannel/subnet.env << EOF
FLANNEL_NETWORK=172.100.0.0/16
FLANNEL_SUBNET=172.100.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF

问题二、

问题描述
部署flannel网络插件失败:

NAMESPACE      NAME                             READY   STATUS              RESTARTS   AGE
kube-flannel   kube-flannel-ds-55nbz            0/1     CrashLoopBackOff    3          2m48s

原因分析:
查看pod日志:kubectl get pod -n kube-flannel kube-flannel-ds-55nbz

E0825 09:00:25.015344       1 main.go:330] Error registering network: failed to acquire lease: subnet "10.244.0.0/16" specified in the flannel net config doesn't contain "172.16.0.0/24" PodCIDR of the "master" node.
W0825 09:00:25.018642       1 reflector.go:436] github.com/flannel-io/flannel/subnet/kube/kube.go:403: watch of *v1.Node ended with: an error on the server ("unable to decode an event from the watch stream: context canceled") has prevented the request from succeeding
I0825 09:00:25.018698       1 main.go:447] Stopping shutdownHandler...

原因:初始化master节点时,指定了–pod-network-cidr=172.16.0.0/16
那么,kube-flannel.yml中该部分网段也要进行对应,默认是“10.244.0.0/16”

解决方案:

vi kube-flannel.yml

 
 # 修改位置
 net-conf.json: |
    {
      "Network": "172.168.0.0/16", #  修改为 master初始化时 pod 的网段
      "Backend": {
        "Type": "vxlan"
      }
    }

执行以上更改后重新应用:

kubectl delete -f kube-flannel.yml

kubectl apply -f kube-flannel.yml

9、加入工作节点:

提前解决 一会执行后会遇到的问题

遇到问题:

Warning:detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”.

[警告IsDockerSystemdCheck]:检测到“cgroupfs”作为Docker cgroup驱动程序。 推荐的驱动程序是“systemd”。

所以我们更换一下驱动。

解决方法:修改docker

在/etc/docker下创建daemon.json并编辑:

vi /etc/docker/daemon.json

加入以下内容:

{
 "exec-opts":["native.cgroupdriver=systemd"]
}

在这里插入图片描述

重启docker

systemctl restart docker
systemctl status docker

注:仅在node节点执行

具体的token 来自于 kubeadm init 时 生成的 详情中的内容 中

kubeadm join k8s-master:6443 --token 02f7y1.k9dgww0wcobl0s9c \
    --discovery-token-ca-cert-hash sha256:07b802f242cfb73780d757e056978731a822fcc339ba4c9ee95afa5a64819090

10、安装 k8s dashboard:

注:仅在master节点执行

1、部署

kubernetes官方提供的可视化界面

https://github.com/kubernetes/dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

2、设置访问端口

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

执行以上命令会打开一个文件 将其中的 type: ClusterIP 改为 type: NodePort

查看:

kubectl get svc -A |grep kubernetes-dashboard

在这里插入图片描述

3、创建访问账号

  1. vi dash.yaml 粘贴以下内容 就会创建一个用户 admin—user

    #创建访问账号,准备一个yaml文件; vi dash.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    
  2. 执行:

    kubectl apply -f dash.yaml
    

    创建用户成功:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IXiQ7ojB-1686793347040)(https://gitee.com/dachang-rolling-dog/note-pic/raw/master/k8s/%E9%B2%B2%E9%B9%8F920%20%E6%90%AD%E5%BB%BAk8s%E9%9B%86%E7%BE%A4%E5%B9%B6%E5%AE%89%E8%A3%85dashboard.assets/image-20230614220707237.png)]

4、令牌访问

#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

令牌:

eyJhbGciOiJSUzI1NiIsImtpZCI6ImlDd2FhalJURElqcFlhaG81Q2ViZVNJejJmekJVdVR3eWszbEl1WkNjOWsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTRndDJ0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJjYjUxZjBiOC02MDYzLTRlNDktODY0Mi0yNWI0YWNhNmUxYTEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.roM2nTjHy5zeMgOdHFvS5pEJe2gLvYBs3Fax15BQgOCqKrUK8DpE7LYRQLoANFfXPMqJEjz-Q5QObwZKq7HoVAJNqyKp4m78SVRvwmBTO_PG6uCgUKFQ44vxFDdMarKs5Mn2Pzcl7pe-Cu8vUBo1XhUnDroJMFHMhXcSzfxcmPkNSrWfTcj8s48nDp5bIKFweuRQ0B6Ash4jUTvMIyr02GdzNAWhU9QOjXg8HYQGceLyrAvIgO2Li4D9yrlSJZaJeKPhQumvt0-I2kvI_fmW6rJcMNxBLwNMX0ickuw68km_Mbtyx14fcTwOpZ8YI0YjsByUeQ_87qtB82kc3lZsyQ

5、界面

注意点 要使用 火狐浏览器访问 因为这里暂时还没有配置证书 (因为证书比较老 要换新)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CsDY1dYV-1686793347040)(https://gitee.com/dachang-rolling-dog/note-pic/raw/master/k8s/%E9%B2%B2%E9%B9%8F920%20%E6%90%AD%E5%BB%BAk8s%E9%9B%86%E7%BE%A4%E5%B9%B6%E5%AE%89%E8%A3%85dashboard.assets/image-20230614220837233.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IUP8lTxe-1686793347041)(https://gitee.com/dachang-rolling-dog/note-pic/raw/master/k8s/%E9%B2%B2%E9%B9%8F920%20%E6%90%AD%E5%BB%BAk8s%E9%9B%86%E7%BE%A4%E5%B9%B6%E5%AE%89%E8%A3%85dashboard.assets/image-20230614220845600.png)]

后言:

**我也很想在这个集群上搭建kubesphere 但是kubesphere 现在还不支持 arm 的cpu 所有暂时还不能实现 **

在这里插入图片描述

附录:

kube-flannel.yml:

---
kind: Namespace
apiVersion: v1
metadata:
  name: kube-flannel
  labels:
    k8s-app: flannel
    pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: flannel
  name: flannel
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
- apiGroups:
  - networking.k8s.io
  resources:
  - clustercidrs
  verbs:
  - list
  - watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: flannel
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: flannel
  name: flannel
  namespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-flannel
  labels:
    tier: node
    k8s-app: flannel
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "192.168.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-flannel
  labels:
    tier: node
    app: flannel
    k8s-app: flannel
spec:
  selector:
    matchLabels:
      app: flannel
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
      hostNetwork: true
      priorityClassName: system-node-critical
      tolerations:
      - operator: Exists
        effect: NoSchedule
      serviceAccountName: flannel
      initContainers:
      - name: install-cni-plugin
        image: docker.io/flannel/flannel-cni-plugin:v1.1.2
       #image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2
        command:
        - cp
        args:
        - -f
        - /flannel
        - /opt/cni/bin/flannel
        volumeMounts:
        - name: cni-plugin
          mountPath: /opt/cni/bin
      - name: install-cni
        image: docker.io/flannel/flannel:v0.22.0
       #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.22.0
        command:
        - cp
        args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      containers:
      - name: kube-flannel
        image: docker.io/flannel/flannel:v0.22.0
       #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.22.0
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: false
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: EVENT_QUEUE_DEPTH
          value: "5000"
        volumeMounts:
        - name: run
          mountPath: /run/flannel
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
        - name: xtables-lock
          mountPath: /run/xtables.lock
      volumes:
      - name: run
        hostPath:
          path: /run/flannel
      - name: cni-plugin
        hostPath:
          path: /opt/cni/bin
      - name: cni
        hostPath:
          path: /etc/cni/net.d
      - name: flannel-cfg
        configMap:
          name: kube-flannel-cfg
      - name: xtables-lock
        hostPath:
          path: /run/xtables.lock
          type: FileOrCreate

命令详解集:

环境配置:

# 将 SELinux 设置为 permissive 宽容模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

#关闭swap
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

解释:

  1. sudo setenforce 0
    • 作用:此命令用于临时禁用 SELinux(Security-Enhanced Linux)的强制模式。
    • 解释:SELinux 是一种安全模块,用于在 Linux 操作系统上实施强制访问控制。setenforce 命令用于更改 SELinux 的强制模式状态。通过将其设置为 0,也就是"Permissive"(宽容模式),SELinux 会记录违规行为,但不会阻止它们。
  2. sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    • 作用:此命令用于修改 /etc/selinux/config 文件中的 SELinux 配置。
    • 解释:sed 是一个文本处理工具,而这个命令使用 sed/etc/selinux/config 文件进行编辑。-i 选项指示 sed 在原始文件中进行直接编辑,而不是输出到标准输出。正则表达式 s/^SELINUX=enforcing$/SELINUX=permissive/ 用于搜索以 SELINUX=enforcing 开头的行,并将其替换为 SELINUX=permissive。这将把 SELinux 的强制模式从 “Enforcing”(强制模式)修改为 “Permissive”(宽容模式)。修改后的配置将在系统重新启动后生效。
  3. 关闭 swap:
    • 命令:swapoff -a
    • 作用:此命令用于关闭系统中的 swap 分区。
    • 解释:Swap 是一种用于在物理内存不足时将数据转存到磁盘的机制。在 Kubernetes 集群中,建议禁用 swap,因为 swap 对于容器化应用来说可能会导致性能下降。通过执行 swapoff -a 命令,系统将关闭所有的 swap 分区。
  4. 注释掉 swap 分区:
    • 命令:sed -ri 's/.*swap.*/#&/' /etc/fstab
    • 作用:此命令用于在 /etc/fstab 文件中注释掉 swap 分区的相关行。
    • 解释:/etc/fstab 是一个用于存储文件系统挂载信息的文件。通过执行上述命令,它会使用正则表达式将 /etc/fstab 文件中包含 “swap” 的行注释掉,从而禁用了系统的 swap 分区。
  5. 允许 iptables 检查桥接流量:
    • 命令:cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF
    • 作用:此命令用于创建并编辑 /etc/modules-load.d/k8s.conf 文件,以加载 br_netfilter 模块。
    • 解释:Kubernetes 集群中使用桥接网络(bridge network),br_netfilter 模块对于 iptables 在桥接流量上进行检查是必需的。通过执行上述命令,将 br_netfilter 添加到 /etc/modules-load.d/k8s.conf 文件中,以确保在系统启动时加载该模块。
  6. 设置网络参数:
    • 命令:cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
    • 作用:此命令用于创建并编辑 /etc/sysctl.d/k8s.conf 文件,设置网络参数,并通过 sysctl --system 命令使其生效。
    • 解释:Kubernetes 需要特定的网络参数配置。上述命令将 net.bridge.bridge-nf-call-ip6tablesnet.bridge.bridge-nf-call-iptables 设置为 1,以确保 Linux 桥接网络能够正确工作。通过执行 sudo sysctl --system,使配置的网络参数在系统重新启动后生效。

安装时间同步器

yum install chrony -y
systemctl enable chronyd.service
systemctl start chronyd.service
  1. 安装 Chrony:
    • 命令:yum install chrony -y
    • 作用:此命令使用 yum 包管理器在系统上安装 Chrony 时间同步服务。
    • 解释:Chrony 是一个网络时间协议 (NTP) 客户端和服务器,用于在计算机系统之间同步时间。通过执行上述命令,会使用 yum 安装 Chrony 包并自动解决其依赖项。
  2. 启用 Chrony 服务:
    • 命令:systemctl enable chronyd.service
    • 作用:此命令用于在系统启动时启用 Chrony 服务。
    • 解释:systemctl enable 命令用于设置服务在系统启动时自动启用。通过执行上述命令,Chrony 服务将在系统启动时自动启动。
  3. 启动 Chrony 服务:
    • 命令:systemctl start chronyd.service
    • 作用:此命令用于启动 Chrony 服务。
    • 解释:systemctl start 命令用于启动指定的服务。通过执行上述命令,Chrony 服务将立即启动并开始同步系统时间。

请注意,Chrony 服务的安装和启动是为了确保系统中的时间同步,这在分布式系统和集群中特别重要。

作用:

  1. 一致性和协调:在分布式系统中,不同的计算节点或服务器之间需要相互协调和通信。如果节点的时间不同步,可能导致数据不一致、操作冲突以及其他协调问题。通过时间同步,可以确保各个节点上的时钟保持一致,从而提供一致的视图和行为。
  2. 计算和日志的一致性:许多分布式系统和应用程序依赖于时间戳来进行计算、排序和记录事件。如果不同节点的时间不同步,可能导致计算错误、事件顺序混乱或日志不准确。通过时间同步,可以确保这些操作的一致性和准确性。
  3. 安全和认证:许多安全协议和机制依赖于时间来验证和认证事件的顺序和时间戳。例如,证书的有效期限、身份验证令牌的时效性等。如果时间不同步,这些安全机制可能会受到威胁或无效。通过时间同步,可以确保安全协议和认证机制的正确运行。
  4. 故障排除和日志分析:当系统发生故障或问题时,时间戳在故障排除和日志分析中起着关键作用。通过时间同步,可以确保事件的时间戳是准确的,从而帮助定位和解决问题

设置 hostname

hostnamectl set-hostname k8s-master
  • hostnamectl 是一个命令行工具,用于管理主机名和相关的系统设置。
  • set-hostnamehostnamectl 的一个子命令,用于设置主机名。
  • k8s-master 是您希望设置的新主机名。

通过执行该命令,系统的主机名将被更改为 “k8s-master”。请注意,更改主机名可能需要重新启动系统才能生效。主机名对于网络通信和标识主机在集群中的角色非常重要,因此设置有意义和易于识别的主机名可以提高系统管理和维护的效率。

配置master域名

#所有机器配置master域名
echo "10.13.166.115  k8s-master" >> /etc/hosts   # 注意点: ip 改为master 的ip 也就是这台服务器的ip
  • echo 是一个命令行工具,用于输出文本内容。
  • "10.13.166.115 k8s-master" 是您要添加的 IP 地址和主机名的映射。
  • >> /etc/hosts 将输出的内容追加到 /etc/hosts 文件中。

通过执行该命令,将 IP 地址 “10.13.166.115” 和主机名 “k8s-master” 添加到 /etc/hosts 文件的末尾。这样做的目的是在本地主机上建立 IP 地址与主机名的映射关系,以便在网络通信时能够使用主机名进行访问。

请注意,将正确的 IP 地址与主机名映射到 /etc/hosts 文件对于主机之间的通信和名称解析非常重要。确保将实际的 IP 地址替换为 “10.13.166.115”,以与您的环境相匹配。

安装网络工具和跟踪

#可能需要下面命令
yum install -y conntrack
yum install -y socat
  1. 安装 Conntrack:
    • 命令:yum install -y conntrack
    • 作用:该命令使用 yum 包管理器在系统上安装 Conntrack。
    • 解释:Conntrack 是一个连接追踪工具,用于跟踪网络连接和状态。在 Kubernetes 集群中,Conntrack 用于管理和跟踪网络连接,以确保网络流量的正确路由和传递。通过执行上述命令,将使用 yum 安装 Conntrack 包并自动解决其依赖项。
  2. 安装 Socat:
    • 命令:yum install -y socat
    • 作用:该命令使用 yum 包管理器在系统上安装 Socat。
    • 解释:Socat 是一个多功能的网络工具,用于在不同的网络层之间建立连接和传输数据。在 Kubernetes 集群中,Socat 可能用于代理、转发和调试网络流量。通过执行上述命令,将使用 yum 安装 Socat 包并自动解决其依赖项。

这两个工具在 Kubernetes 集群的安装和运行中扮演重要的角色,确保网络连接的正确性和稳定性。安装它们可以满足集群的依赖要求,并提供所需的网络功能。

给master 打上污点:

kubectl taint nodes k8s-master node-role.kubernetes.io=master:NoSchedule

#  k8s-master 是 master节点的名称  可以通过 kubectl get nodes查看
  • kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互。

  • taintkubectl 的一个子命令,用于向节点添加或移除 Taint。

  • nodes k8s-master 表示目标节点的名称为 “k8s-master”。

  • node-role.kubernetes.io=master:NoSchedule
    

    是要添加的 Taint 的键值对表示形式。

    • node-role.kubernetes.io=master 表示 Taint 的键为 “node-role.kubernetes.io”,值为 “master”。
    • NoSchedule 是 Taint 的效果,它将阻止调度器在节点上运行不符合 Taint 要求的 Pod。

通过执行该命令,将在名为 “k8s-master” 的节点上添加一个 Taint,表示该节点是一个主节点(master)并且不会被调度器用于运行不符合 Taint 要求的 Pod。这样做的目的是确保主节点不会负载过重,并保持其用于运行系统关键组件的能力。

请注意,在执行该命令之前,请确保您具有足够的权限和对目标节点的管理访问权限。

问题解决:

dnf install -y iproute-tc
  • dnf 是在基于 Fedora、CentOS 和 RHEL (Red Hat Enterprise Linux) 等系统上使用的包管理器。
  • install -ydnf 的子命令和选项,用于安装软件包并自动确认所有提示。
  • iproute-tc 是要安装的软件包的名称。

通过执行该命令,将使用 DNF 安装名为 iproute-tc 的软件包。iproute-tc 是用于配置和管理网络路由和流量控制的工具。它提供了丰富的网络管理功能,包括设置路由规则、配置网络接口和控制流量等。

请注意,该命令可能需要在具有适当权限的用户或管理员权限下执行。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐