鲲鹏920 arm 搭建k8s集群并安装dashboard
通过执行该命令,将在名为 “k8s-master” 的节点上添加一个 Taint,表示该节点是一个主节点(master)并且不会被调度器用于运行不符合 Taint 要求的 Pod。主机名对于网络通信和标识主机在集群中的角色非常重要,因此设置有意义和易于识别的主机名可以提高系统管理和维护的效率。这两个工具在 Kubernetes 集群的安装和运行中扮演重要的角色,确保网络连接的正确性和稳定性。请注意
文章目录
鲲鹏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、创建访问账号
-
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
-
执行:
kubectl apply -f dash.yaml
创建用户成功:
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、界面
注意点 要使用 火狐浏览器访问 因为这里暂时还没有配置证书 (因为证书比较老 要换新)。
后言:
**我也很想在这个集群上搭建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
解释:
sudo setenforce 0
:- 作用:此命令用于临时禁用 SELinux(Security-Enhanced Linux)的强制模式。
- 解释:SELinux 是一种安全模块,用于在 Linux 操作系统上实施强制访问控制。
setenforce
命令用于更改 SELinux 的强制模式状态。通过将其设置为 0,也就是"Permissive"(宽容模式),SELinux 会记录违规行为,但不会阻止它们。
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”(宽容模式)。修改后的配置将在系统重新启动后生效。
- 作用:此命令用于修改
- 关闭 swap:
- 命令:
swapoff -a
- 作用:此命令用于关闭系统中的 swap 分区。
- 解释:Swap 是一种用于在物理内存不足时将数据转存到磁盘的机制。在 Kubernetes 集群中,建议禁用 swap,因为 swap 对于容器化应用来说可能会导致性能下降。通过执行
swapoff -a
命令,系统将关闭所有的 swap 分区。
- 命令:
- 注释掉 swap 分区:
- 命令:
sed -ri 's/.*swap.*/#&/' /etc/fstab
- 作用:此命令用于在
/etc/fstab
文件中注释掉 swap 分区的相关行。 - 解释:
/etc/fstab
是一个用于存储文件系统挂载信息的文件。通过执行上述命令,它会使用正则表达式将/etc/fstab
文件中包含 “swap” 的行注释掉,从而禁用了系统的 swap 分区。
- 命令:
- 允许 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
文件中,以确保在系统启动时加载该模块。
- 命令:
- 设置网络参数:
- 命令:
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-ip6tables
和net.bridge.bridge-nf-call-iptables
设置为 1,以确保 Linux 桥接网络能够正确工作。通过执行sudo sysctl --system
,使配置的网络参数在系统重新启动后生效。
- 命令:
安装时间同步器
yum install chrony -y
systemctl enable chronyd.service
systemctl start chronyd.service
- 安装 Chrony:
- 命令:
yum install chrony -y
- 作用:此命令使用 yum 包管理器在系统上安装 Chrony 时间同步服务。
- 解释:Chrony 是一个网络时间协议 (NTP) 客户端和服务器,用于在计算机系统之间同步时间。通过执行上述命令,会使用 yum 安装 Chrony 包并自动解决其依赖项。
- 命令:
- 启用 Chrony 服务:
- 命令:
systemctl enable chronyd.service
- 作用:此命令用于在系统启动时启用 Chrony 服务。
- 解释:
systemctl enable
命令用于设置服务在系统启动时自动启用。通过执行上述命令,Chrony 服务将在系统启动时自动启动。
- 命令:
- 启动 Chrony 服务:
- 命令:
systemctl start chronyd.service
- 作用:此命令用于启动 Chrony 服务。
- 解释:
systemctl start
命令用于启动指定的服务。通过执行上述命令,Chrony 服务将立即启动并开始同步系统时间。
- 命令:
请注意,Chrony 服务的安装和启动是为了确保系统中的时间同步,这在分布式系统和集群中特别重要。
作用:
- 一致性和协调:在分布式系统中,不同的计算节点或服务器之间需要相互协调和通信。如果节点的时间不同步,可能导致数据不一致、操作冲突以及其他协调问题。通过时间同步,可以确保各个节点上的时钟保持一致,从而提供一致的视图和行为。
- 计算和日志的一致性:许多分布式系统和应用程序依赖于时间戳来进行计算、排序和记录事件。如果不同节点的时间不同步,可能导致计算错误、事件顺序混乱或日志不准确。通过时间同步,可以确保这些操作的一致性和准确性。
- 安全和认证:许多安全协议和机制依赖于时间来验证和认证事件的顺序和时间戳。例如,证书的有效期限、身份验证令牌的时效性等。如果时间不同步,这些安全机制可能会受到威胁或无效。通过时间同步,可以确保安全协议和认证机制的正确运行。
- 故障排除和日志分析:当系统发生故障或问题时,时间戳在故障排除和日志分析中起着关键作用。通过时间同步,可以确保事件的时间戳是准确的,从而帮助定位和解决问题
设置 hostname
hostnamectl set-hostname k8s-master
hostnamectl
是一个命令行工具,用于管理主机名和相关的系统设置。set-hostname
是hostnamectl
的一个子命令,用于设置主机名。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
- 安装 Conntrack:
- 命令:
yum install -y conntrack
- 作用:该命令使用 yum 包管理器在系统上安装 Conntrack。
- 解释:Conntrack 是一个连接追踪工具,用于跟踪网络连接和状态。在 Kubernetes 集群中,Conntrack 用于管理和跟踪网络连接,以确保网络流量的正确路由和传递。通过执行上述命令,将使用 yum 安装 Conntrack 包并自动解决其依赖项。
- 命令:
- 安装 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 集群进行交互。 -
taint
是kubectl
的一个子命令,用于向节点添加或移除 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 -y
是dnf
的子命令和选项,用于安装软件包并自动确认所有提示。iproute-tc
是要安装的软件包的名称。
通过执行该命令,将使用 DNF 安装名为 iproute-tc
的软件包。iproute-tc
是用于配置和管理网络路由和流量控制的工具。它提供了丰富的网络管理功能,包括设置路由规则、配置网络接口和控制流量等。
请注意,该命令可能需要在具有适当权限的用户或管理员权限下执行。
更多推荐
所有评论(0)