K8S二进制部署高可用集群-1.22[七]
本节前言:
本节关键字:CALICO、CoreDNS;
关于"CALICO"插件,本示例使用了"CALICO"作为K8S集群的"CNI",使用的网络模式是网络术语中的"BGP"网络模式;
关于"CoreDNS"插件,主要作用为:是一个在K8S集群中提供DNS服务的POD,为同一集群中的其他POD提供DNS解释服务;
本节开始……
一、CALICO插件
"CALICO"插件的部署非常简单,就是下载官方的配置文件,然后修改相应的配置项,然后应用至K8S集群即可;以下操作可以在任何计算机上执行[仅需要一执行一次],博主的习惯是在[192.168.100.41]进行操作的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# [50节点以下] # 进入对应目录,这个目录是博主设定专用于保存K8S集群中CALICO的配置的 $ cd /opt/cluster/plugins/calico # 下载最新的官方默认的配置文件 # 你也可以使用博主所提供的下载文件中对应的"calico.yaml",这是博主实际操作时所使用的官方默认配置 $ curl https://docs.projectcalico.org/manifests/calico.yaml -O # 修改官方配置文件中的以下配置[配置值应与K8S集群的定义值相同] $ vim calico.yaml - name: CALICO_IPV4POOL_CIDR # PodIP的CIDR范围 value: "10.97.0.0/16" # [修改]PodCIDR范围[等于"kube-controller-manager"中的"--cluster-cidr="] - name: CALICO_IPV4POOL_IPIP # CALICO IPIP 模式的启用/禁用 value: "Never" # [修改]"Never"表示使用BGP;"Always"表示使用IPIP - name: IP_AUTODETECTION_METHOD # [按需使用]特殊配置,未在默认的配置文件中存在,需要手动增加,与"CALICO_IPV4POOL_CIDR"同级 value: "interface=eth0" # CALICO的部署默认会自动选择合适的网卡,但在一些环境中此方法可能会存在问题,本配置项的作用为 # 用于定义部署过程中的网卡选择;"eth0"这实际是一个正则表达式,"eth0"表示严格匹配所使用的网卡 # 提示:如果你的网络环境能正常部署成功,不建议增加此项而提高维护的复杂度 |
修改成功后,在K8S集群中应用"calico.yaml":
1 2 |
$ cd /opt/cluster/plugins/calico $ kubectl apply -f calico.yaml |
使用"kubectl"检查CALICO相关状态;
1 2 3 4 5 |
# 查询相关POD是否正常启动 kubectl get pod -A # 查询相关节点是否转换至"Ready"状态[需要POD"calico-node"处于"Running"状态] kubectl get nodes |
关于"CALICO"插件部署至此结束~~
二、CoreDNS插件
"CoreDNS"插件的安装方法与"CALICO"插件的安装方法相同,同样的,你可以在任何的计算机下执行操作,只要你的"kubectl"命令能正常使用;博主是在[192.168.100.41]下操作的;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# 进入对应目录,这个目录是博主设定专用于保存K8S集群中CoreDNS的配置的 $ cd /opt/cluster/plugins/coredns # 下载最新的官方默认的配置文件 # 你也可以使用博主所提供的下载文件中对应的"calico.yaml",这是博主实际操作时所使用的官方默认配置 $ curl https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/coredns.yaml.sed > coredns.yaml # 修改官方配置文件中的以下配置[配置值应与K8S集群的定义值相同] # 由于内容较多,只列出修改部分 $ vim coredns.yaml --- ... data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes CLUSTER_DOMAIN REVERSE_CIDRS { # [修改]"CLUSTER_DOMAIN"需要配置为"cluster.local",这个值实际与K8S的默认定义有关 fallthrough in-addr.arpa ip6.arpa # 涉及到K8S的多个配置,所以不建议在K8S的配置过程中修改相关值; } # "REVERSE_CIDRS"需要配置为"in-addr.arpa ip6.arpa";本处的配置涉及的是DNS的反向解释功能 prometheus :9153 forward . UPSTREAMNAMESERVER { # "UPSTREAMNAMESERVER"需要配置为"/etc/resolv.conf";本处的配置涉及的是DNS的正向解释功能 max_concurrent 1000 # } cache 30 loop reload loadbalance }STUBDOMAINS # [删除]如果"STUBDOMAINS"有这个东西则删它;猜测是官方表明可以在本处增加子配置项, # 新版本的YAML文件中有这个字段[若不存在则不需要任何操作] --- ... spec: selector: k8s-app: kube-dns clusterIP: CLUSTER_DNS_IP # [修改]"CLUSTER_DNS_IP"需要配置为"10.96.0.10";本处为定义K8S集群内的DNS服务器的地址; # 这个值应该与"kubelet.conf"中定义的"clusterDNS"配置项的值相同; |
修改成功后,在K8S集群中应用"coredns.yaml":
1 2 |
$ cd /opt/cluster/plugins/coredns $ kubectl apply -f coredns.yaml |
使用"kubectl"检查"CoreDNS"相关状态;
1 2 |
# 查询相关POD是否正常启动 kubectl get pod -A |
关于"CoreDNS"插件部署至此结束~~
三、集群测试
至此,整个K8S集群的搭建算是完成了[工作节点复用MASTER节点],之后,我们写一份YAML文件进行K8S集群的测试;以下操作能在任何地方执行["kubectl"命令可用],博主是在[192.168.100.41]上操作的;另外,博主写累了,下面的代码COPY了文章首节提及的参考博文;创建"k8stest.yaml":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# 进入对应目录 cd /root # 生成"k8stest.yaml" cat > k8stest.yaml << "EOF" --- apiVersion: v1 kind: ReplicationController metadata: name: nginx-controller spec: replicas: 2 selector: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service-nodeport spec: ports: - port: 80 targetPort: 80 nodePort: 30001 protocol: TCP type: NodePort selector: name: nginx EOF |
在K8S集群中应用"k8stest.yaml":
1 2 |
$ cd /root $ kubectl apply -f k8stest.yaml |
使用浏览器访问"http://192.168.100.4X:30001"[成功];
1 2 3 |
# 删除测试POD cd /root kubectl delete -f k8stest.yaml |
本部分内容至此结束~~
结、
不废话了,累!下一节将是关于"节点添加"与"节点删除"的,可能还会说一些废话。本篇完,读者可点击以下链接进入下一章或返回上一章;
networkReady="NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 兄弟,我执行kubectl get pod -A ,no resource 日志里报这个错,百度一圈说是网络插件没成功,不知道啥问题
2022-03-24 下午3:54[root@kube-node1 plugins]# kubectl apply -f calico.yaml
2022-03-24 下午4:15configmap/calico-config unchanged
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org configured
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers unchanged
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers unchanged
clusterrole.rbac.authorization.k8s.io/calico-node unchanged
clusterrolebinding.rbac.authorization.k8s.io/calico-node unchanged
daemonset.apps/calico-node configured
serviceaccount/calico-node unchanged
deployment.apps/calico-kube-controllers unchanged
serviceaccount/calico-kube-controllers unchanged
Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/calico-kube-controllers configured 这个是应用calico.yaml
这个信息看不出来真正原因,但已经提示了你DOCKER的网络运行时没有正确运行;1、查看calico.yaml中的需要的镜像是否已经下载;2、有关DOCKER的网络划分是否产生的地址范围上的冲突;3、是否正确配置了IPVS;4、利用'kubectl logs'查询相关POD的启动日志信息;
2022-03-25 上午11:09部署calico插件,controller-manager出现的:Readiness probe failed: Failed to read status file /status/status.json: unexpected end of JSON input
2021-12-22 下午4:46已解决,但是出现一个问题就是master ping 不通10.96.0.1
2021-12-23 下午5:55我特意去看了看博文中这个IP是什么东西;我也说不清楚为什么需要配置这个IP,因为我也是参照了别人的博客来写这个系列;实际上我在这个IP的说明上特意注明了"猜测"!这个系列的知识点太多了,我没那么多时间去一一核查;实际上在写那个MASTER证书请求中的IP地址时,我是怀疑过那些IP地址是不是需要写这么多的,但我没时间去测试这个!有兴趣你可以自己去测试;
以下这个解释是猜测:关于PING不通10.96.0.1,这基本是必然的,因为这个IP在K8S系统中并不是一个真正的"实体"[例如一个容器],你可以把他想象成一个"Services"资源,当你尝试PING一个"Services"资源时,也是PING不通的,因为这不是一个实体;
2021-12-23 下午8:24Readiness probe failed: Failed to read status file /status/status.json: unexpected end of JSON input
2021-12-22 下午4:46[root@kubernetes-master-edge01:/opt/K8S_FILE/plugins]kubectl apply -f calico.yaml
2021-11-17 下午9:57configmap/calico-config unchanged
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org configured
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers unchanged
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers unchanged
clusterrole.rbac.authorization.k8s.io/calico-node unchanged
clusterrolebinding.rbac.authorization.k8s.io/calico-node unchanged
error: error parsing calico.yaml: error converting YAML to JSON: yaml: line 182: did not find expected '-' indicator
检查你的calico.yaml文件中的内容,如果我估计没错,应该是你修改这份文件时没有正确的对齐修改项[在你删除"#"这个字符时,没有和前面的内容对齐]
2021-11-19 上午11:33好兄弟, 我的问题
2021-11-19 下午8:19