Kubernetes—k8s中Service实例出现污点
Service可以看做是一组同类的Pod对外的访问接口,借助Service,应用可以方便的实现服务发现和负载均衡。
Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进
程,每个Node节点上都运行了一个kube-proxy的服务进程。当创建Service的时候会通过API Server向etcd写入创建的Service的信息,而kube-proxy会基于监听的机制发现这种Service的变化,然后它会将最新的Service信息转换为对应的访问规则。
开启ipvs(必须安装ipvs内核模块,否则会降级为iptables):
kubectl edit cm kube-proxy -n kube-system
kubectl delete pod -l k8s-app=kube-proxy -n kube-system
# 测试ipvs模块是否开启成功
ipvsadm -Ln
service使用实例
在使用Service之前,首先利用Deployment创建出3个Pod,注意要为Pod设置app=nginx-pod 的标签。
创建deployment.yaml文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: pc-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
创建Deployment:
kubectl create -f deployment.yaml
查看Pod信息:
kubectl get pod -o wide --show-labels
结果发现ip显示none,没分配ip。
这是什么原因呢?
其实,是因为w我的三个集群节点(节点名分别为k8s-master、k8s-node02、k8s-node01)有污点了。
先查看污点名
[root@k8s-master ~]# kubectl describe node k8s-node02 |grep Taints
Taints: node.kubernetes.io/unreachable:NoSchedule
[root@k8s-master ~]# kubectl describe node k8s-master |grep Taints
Taints: node-role.kubernetes.io/master:NoSchedule
[root@k8s-master ~]# kubectl describe node k8s-node01 |grep Taints
Taints: <none>
然后,用-去除污点后就好了
[root@k8s-master ~]# kubectl taint nodes k8s-master node-role.kubernetes.io/master:NoSchedule-
node/k8s-master untainted
[root@k8s-master ~]# kubectl taint nodes k8s-node02 node.kubernetes.io/unreachable:NoSchedule-
node/k8s-node02 untainted
[root@k8s-master ~]# kubectl describe node k8s-node01 |grep Taints
Taints: <none>
[root@k8s-master ~]# kubectl taint nodes k8s-node01 <none>-
-bash: none: No such file or directory
(别忘了 - )
再查看的时候就有ip了