K8S快速部署

embedded/2025/3/18 10:28:24/

    • 前置虚拟机环境
    • 正式部署
    • BUG解决

前置虚拟机环境

每个虚拟机配置一次就好

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
#关闭 swap
swapoff -a # 临时
vim /etc/fstab # 永久
#将桥接的 IPv4 流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
#时间同步
yum install ntpdate -y
ntpdate time.windows.com
#主机名
hostnamectl set-hostname <hostname>
#在 master 添加 hosts:
cat >> /etc/hosts << EOF
192.168.235.139 k8s-master
192.168.235.133 k8s-node1
192.168.235.134 k8s-node2
EOF

没有Docker需要先安装并更换镜像源

添加 yum 源

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

安装 kubeadm,kubelet 和 kubectl

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet

正式部署

在 192.168.235.139(Master)执行

kubeadm init \
--apiserver-advertise-address=192.168.235.139 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

这条指令执行完后会自动部署k8s的容器,执行完成后会有

kubeadm join 192.168.235.139:6443 --token 5l9p1e.xzn5a7jv3j75l9v0     --discovery-token-ca-cert-hash sha256:41a451baae921a44253243fc54ce7efb604db7df42fb541802337d08868a4a73 

此时在从节点输入上述指令,即可加入集群

kubectl get nodes #测试

执行完后正常应该是都ready了,然后docker ps集群的各个节点也会多出很多k8s相关容器
在这里插入图片描述
在这里插入图片描述

使用 kubectl 工具

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

这个我没加后面也能跑。。。

安装 Pod 网络插件(CNI)

kubectl apply –f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml

确保能够访问到 quay.io 这个 registery。如果 Pod 镜像下载失败,可以改这个镜像地址
这个不一定能连上,首先要试试

ping baidu.com

看能不能ping通外网
不行的话需要在DNS加个114.114.114.114
具体参考解决:ping: www.baidu.com: 未知的名称或服务

能ping通外网以后可以把raw.githubusercontent.com换成镜像源或者添加对应的ip,这个网上有相应教程,搜这个网址的关键词就行

或者直接自己创建

cat <<EOF > kube-flannel.yml
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: psp.flannel.unprivilegedannotations:seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/defaultseccomp.security.alpha.kubernetes.io/defaultProfileName: docker/defaultapparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/defaultapparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:privileged: falsevolumes:- configMap- secret- emptyDir- hostPathallowedHostPaths:- pathPrefix: "/etc/cni/net.d"- pathPrefix: "/etc/kube-flannel"- pathPrefix: "/run/flannel"readOnlyRootFilesystem: false# Users and groupsrunAsUser:rule: RunAsAnysupplementalGroups:rule: RunAsAnyfsGroup:rule: RunAsAny# Privilege EscalationallowPrivilegeEscalation: falsedefaultAllowPrivilegeEscalation: false# CapabilitiesallowedCapabilities: ['NET_ADMIN', 'NET_RAW']defaultAddCapabilities: []requiredDropCapabilities: []# Host namespaceshostPID: falsehostIPC: falsehostNetwork: truehostPorts:- min: 0max: 65535# SELinuxseLinux:# SELinux is unused in CaaSPrule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups: ['extensions']resources: ['podsecuritypolicies']verbs: ['use']resourceNames: ['psp.flannel.unprivileged']
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-systemlabels:tier: nodeapp: 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": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cni-pluginimage: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0command:- cpargs:- -f- /flannel- /opt/cni/bin/flannelvolumeMounts:- name: cni-pluginmountPath: /opt/cni/bin- name: install-cniimage: quay.io/coreos/flannel:v0.15.1command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.15.1command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cni-pluginhostPath:path: /opt/cni/bin- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
EOF

应用配置

kubectl apply –f kube-flannel.yml

检验结果

kubectl get pods -n kube-system | grep kube-flannel

在这里插入图片描述
kubectl get pod -n kube-system -o wide在这里插入图片描述

如果有Error或者其他非Running情况:
查看具体报错情况

kubectl describe pod kube-flannel-ds-xxxx -n kube-system

如果是pull image出错:
注意上面kube-flannel.yml用到了2个image,那需要手动拉取

docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
docker puil quay.io/coreos/flannel:v0.15.1

这里尤其需要注意,K8S把POD分配在了哪个节点,我这里是master,那就必须在master pull在这里插入图片描述
测试 kubernetes 集群

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

在这里插入图片描述
集群中的任一节点ip都能访问pod在这里插入图片描述

BUG解决

究极解决方案:删除K8S所有配置直接重装
什么unready基本都能解决

kubeadm reset
rm -rf $HOME/.kube

删除后直接从kubeadm init开始重装

参考文章:
kubernetes 坑人的错误!!!Unable to connect to the server: x509: certificate signed by unknown authority


http://www.ppmy.cn/embedded/173568.html

相关文章

08-单链表-单链表基本操作2

题目 来源 18. 链表的基本操作 思路 与上一份的最大区别就是要先判断一下要处理的k是否是合法的&#xff0c;也就是要先将指针能够指向k&#xff1b; 上一份的idx是一个全局的指针&#xff0c;由于链表天生就是物理位置不用连续&#xff0c;所以idx可以在任意位置&#xff…

使用OpenCV和MediaPipe库——抽烟检测(姿态监控)

目录 抽烟检测的运用 1. 安全监控 (1) 公共场所禁烟监管 (2) 工业安全 2. 智能城市与执法 (1) 城市违章吸烟检测 (2) 无人值守管理 3. 健康管理与医疗 (1) 吸烟习惯分析 (2) 远程监护 4. AI 监控与商业分析 (1) 保险行业 (2) 商场营销 5. 技术实现 (1) 计算机视…

微服务即时通信系统---(八)用户管理子服务

本章节,主要对项目中用户管理子服务模块进行分析、开发与测试。 功能设计 用户管理子服务,主要用于管理用户的数据,以及关于用户信息的各项操作,因此,在本模块中,用户管理子服务需要提供以下的功能性接口 用户注册用户输入 用户名(昵称) + 用户密码 进行注册。用户登录…

docker学习

基本结构 镜像(image)&#xff1a; docker镜像可以当作一个模板&#xff0c;通过这个模板可以创建多个容器。 例如一个tomcat镜像>运行>容器(提供服务) 容器(container)&#xff1a; docker利用容器技术&#xff0c;可以独立运行一个或一组应用(容器间相互隔离) docker…

C语言:编程设计猜数游戏

先由计算机想一个数给用户猜&#xff0c;如果猜对了&#xff0c;提示“right&#xff01;”&#xff0c;猜错了&#xff0c;提示“wrong&#xff01;及大小” 思路&#xff1a;用随机函数rand&#xff08;&#xff09;取到计算机想的数 代码&#xff1a; #include <stdio.…

JVM、MySQL常见面试题(尽力局)

JVM篇 一.谈一谈JDK、JRE、JVM分别是什么&#xff0c;有什么联系&#xff1f; 1.JDK是Java工具包&#xff0c;里面包含了JRE、Javac编译器等。 2.JRE是java运行环境&#xff0c;里面包含了JVM、JavaSE标准库类等。 3.JVM是Java虚拟机&#xff0c;运行编译后的.class的文件&am…

C/C++中应用程序调用其他dll模块,想要使用vs调试这个dll里的代码,附加进程的方式无法命中断点,但通过调试启动的方式却可以,是什么原因?

文章目录 1. 符号文件&#xff08;PDB&#xff09;未正确加载2. DLL 版本与调试代码不一致3. DLL 加载时机错过调试器附加4. 调试器类型不匹配5. 编译优化导致断点偏移6. 断点位置未被执行7. 配置属性设置错误快速诊断流程&#xff1a;终极方案&#xff1a;直接调试启动 在 Vis…

机器学习中说的正向传递和反向传递是什么意思

在机器学习&#xff0c;尤其是深度学习领域&#xff0c;​正向传递&#xff08;Forward Pass&#xff09;​和反向传递&#xff08;Backward Pass&#xff09;​是神经网络训练过程中的两个核心步骤。它们共同构成了训练神经网络的基础框架&#xff0c;通常与梯度下降算法结合使…