今天是是第三篇,接着上一篇继续
首先,通过kubectl可以看到,三个节点都正常运行
[root@k8s-master001 ~]# kubectl get no
NAME STATUS ROLES AGE VERSION
k8s-mai H d { l J | ~ster001 Ready master 16h v1B D [ ; n.19.0
k8s-master002 Read& a C j _ P `y master 16h v1.1k T N K ] D9.0
k8s-master003 Ready master 16h v1.19.0
现在来部署第一个服务,这里以ngi5 j 7 Q , U Q w Bnx为例
[root@k8s-masteq 1 | 5 X [r001 ~]# kubectl run nginx --image=nginx --port=c N R X W (80
pod/nginx created
可以看到,我们再k8s集群上创建了一个nginx应用,然后我们通过如下命令查看状态,发现现在nginx状态为Pendi4 ~ 9 c d Cng
[root@k8s-master001 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nt 5 , z H c = uginx 0/1 Pending 0 7s
现} ) j Q在我们使用kubectl desG i )cribe
命令来查看更多信息
[root@k8s-master001 ~]# kubectl describe po nginx
Name: nginx
Namespace: default
Priority: 0
Nod. , t ) ye: <v | R s M C U 1;nok p x @ } ` B W @ne>
Labels: run=nginx
Annotations: <none>
Status: PenG u 2 S s d kding
IP:
IPs: <no@ - ] une>
Containers:
nginx:
Image: nginx
Po} p 8 = E = @ E =rt: <none>
H+ $ 6 G F ) l E qost Port: <none>
Envirm ~ : ) aonment: <none>
Mounts:
/var/run/secretsi 0 l/kuberne1 * m _ b g c Ytes.io/serviceaccount from dr s Wefault-token-6gd92 (ro)
Conditions:
Type Status
PodScheduled F6 $ Q - M = * u Lalse
Volumes:
default-token-6gd92:
Type: Secret (a volume pW # 7 T 7 , ?opulated by a Secret)
SecretName: default-token-6gd92
Optional: falsj @ @e
QoS Class: Bestb l G K 7 p f mEffort
Node-Selectors: <none>
Tolerations: n] ) $ 7 { a dode.kubernetes.iq 5 8 K z 5 4 Ao/not-ready:NoExecute op=Ex0 i B _ M 4 P %ists for 300s
node.kubernetes.iE N - Z po/unreacO L p # !hable:NoExecute op=E~ o C g i r Uxist! 2 R 4 l Z ? x &s for 300s
Events:
Type Reason Age From Messag- m B q 9 _ Ye
---- ------ ---- ---- -------
Warning FailedScheduling 15s 0/3 nodes are available: 3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
Warning FailedSchedulinG B z s t W Pg 14s 0/3 nodes are$ ( p available: 3 no- y c e Z T s o pde(s) had ta% k iint {node-role.kubernetes.io@ D R b ) 0 j ;/master: }, that the pZ H P i ; @ L Iod didn't tolerate.
从输出信息可以看到最后两个事件3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
什么意思呢?什么意思呢?
这个提示表示,没有{ L B节点可以接受调度。
为什么会这样呢?
因为O o 8 A我们现在三个节点都是master节点,还没有添加node节点。默认T H | b n r s t情况下,master打了污点(taint,后续再介绍),master节点不接收调度。
由于我们这里是测试环境,没有多余的机器来作为node节点,可以手动删除master的污点,让master节点接收调度。
通过如下命令可以查看taint信息u a g } O 3 /:
[root@k8s-master001 ~]# kubectl geR J at no -o yaml | grep taint -A 5
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:10:40Z"
- aG I npiVersion: v1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedc @ ] ule
key: node-role.kubernetes.io/master
status:
addresses:
- address:7 d g a Y R u 10.26.25.20
--
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:30:25Z"
- apiVersion: vJ b1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
status:
addresses:
-e d u 4 addres- $ 7s: 10.26.25.21
--
f:tainH D Q 9 E 6 ats: {}
manager: kube-controller-manageW = + qr
operation: Update
time: "2020-09-10T09:35:43Z"
- apiVersion: v1
fiel1 $ ) kdsType: FieldsV1
--
taints:
- ef1 U & 6 3 =fect: NoSchedule
key: node-role.kubernetes.io/master
status:
addreE e D M !sses:
- address: 10.26.25.22
删除污点node-role.kubernetes.io/master
,如下所示
[root@k8s-master- g - ) K001 ~]# kubectl taint nodes --all node-role.kubernetes.io/mastZ & 2 n 0 w c % jer-
node/k8s-master001 untainted
node/k8s-master002 unt4 V . W a ] G 5 aainted
node/k8s-master003 untainted
然后现在在看nginx的状态,已经变为u s e N W )ContainerCreating,这表示已经分配到节点,开始创建nginx的pod了
[root@k8s-master001 ~]# kubectl get po
NAME READY STATUS RESTARTS AN , Y I A &GE
nginx 0/1 ContainerCreating 0 3m11s
使用kubectl get. L 7 X c po -o wide查看,现在nginx已经正常运行了,而且可以看到,nginx现在被分配到 k8s-master001节点上,Pod IP是10.244.0.4
[root@k8s-master001 ~]# kj s L A K E ] 5ubectl~ - & ) = ] U get po -o wide
NAME READY STATUS RESTAs Y E O ^ W % *RTS AGE1 t 3 x H ; # f IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 56m 10.244.0.4 k_ r 18s-master001 <k s ` # Y r Y Cnone> <n 7 & 0one>
现在来访问nginx,熟悉的200出现了~~
[root@k8s-master001 ~]# curl -I 10.244.0.4
HTTPZ 4 r A R d 6/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:22:41 GMT
Content-Type: tey l z 6 Cxt/html
Content-Length: 612
Last-Modified: Tue, 11 Aug 2020 14:50:35 GMT
Connection: keep-alive
ETag: "5f32b03b-264"
Accept-Ranges: bytes
但是如果在非集群节点上访问10.244c s % b.0.4,比如在自己的电脑上访问
[~/b/] : curl -I 10.244.h Q v k t A o0.4
curl: (55) getpeername() failed with errno 22: Inval8 h Eid argument
现在就来解决$ # Y W这个问题,
1、我们删掉原来创建的nginx pod
[root@k8s-master001 ~]# kubectl delete po nginx
pod "nginx" deleted
2、创建nginx.yaml文件
[root@k8s-master001 ~]# cat nginx.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
labels:
a} U # + i Gpp: ! A Y f Z ! nginx
spec:
serviceName: nginx
replicas: 1
selector:
matchLabels:
app: nginx
template:
met% F aadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 180
containers:
- name: nginx
image: nginx
imagePuB X Z HllPolicy: Always
ports:
- containerPort: 80
name: port
---
apiVersion: v1
kind: Service
meta| x y u D kdata:
name: nginx
labels:
ap* d L . L fp: nginx
spec:
type: NodePort
ports:
- port: 80
targetPoO 2 yrt: 80
selector:
app: nginx
3、执行kubectl apply -f nginx.yaml部署
[root@k8s-master001 ~]# kubectl apply -f nginxr G ; K.yaml
statefulset.apps/nginx createdp k [ ] A
service/nginx created
[root@W O ] fk8s-max d V y ( 5ster001 ~]# kubectl get po,ep,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-0 1/1 Running 0 24` ? @ 4 n S k V .s
NAME ENDPOINTS AGE
endpoints/kubernete? Z * R ) A *s 10.26.2q 1 )5.20:6443,10.26.25.21:6443,10.26.25.22:6443 17h
endpoints/nginx 10.244.2.3:80 23s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 &X [ 2 z : Y J d ult;none> 443/TCP 17h
s h k | O Wervice/nginx NodePort 10.106.27.213 <none> 80:30774/TCP 23s
现在能看到,创建了一个名为nginx的service,把nginx默认的80端口映射到了30774
访问集群任意节点的IP:32650,这里是10.26.25.20:30774
在集群节点上访问:
[root@k8s-master001 ~]# curl -I 10.@ 8 5 u n =26.25.20:30774
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:53:55 GMT
Cx + t d 6 ! sontent-Type: text/html
Content-Length: 612
La+ o v + fst-Modified:q z A l E C Tue, 11 Aug 2020 14:50:35 GMT
Connection: keeZ { h _p] h g [-alive
ETag: "5f32b03b-264"
Accept-Ranges: by m a M ` 3 O #ytes
在笔记本电脑+ l ; c ) S ? &上访问:
[~/b/wechatimB [ X w Wages] : curl -I 10.26.25.20:30774
HTTP/1.1 200 OK
Server: nginw . = a d A N 1 6x/1.19.2
Date: Fri, 11 Sep 2020 02:54:24 GMT
Content8 L 3 Z o A s X =-Type: text/html
Content-Length: 612
Last-Modified: Tue, 11 Aug 2020 14:50:35 GMT
Connection: keep-alive
ETag: "5f32b03b-264"
Accept-Ranges: bytes
如果还是
可以先行了解kubernetes的pod,endpoint,service等概念。。。后续文章也会陆续讲到。。。
注:文中图片来源于网络,如有侵权,请联系我及时删除。
Tips: 更多好文章,请关注公*号“菜鸟运维杂谈”!!!
发表评论