今日はその後、第三であるに継続します
まず、kubectlを介して、3つのノードすべてが正常に実行されていることがわかります。
[root@k8s-master001 ~]# kubectl get no
NAME STATUS ROLES AGE VERSION
k8s-master001 Ready master 16h v1.19.0
k8s-master002 Ready master 16h v1.19.0
k8s-master003 Ready master 16h v1.19.0
では、最初のサービスをデプロイしましょう。例として、nginxがあります。
[root@k8s-master001 ~]# kubectl run nginx --image=nginx --port=80
pod/nginx created
ご覧のとおり、k8sクラスターにnginxアプリケーションを作成し、次のコマンドでステータスを確認したところ、nginxステータスがPendingになっていることがわかりました
[root@k8s-master001 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 0/1 Pending 0 7s
kubectl describe
コマンドを使用して詳細を表示します
[root@k8s-master001 ~]# kubectl describe po nginx
Name: nginx
Namespace: default
Priority: 0
Node: <none>
Labels: run=nginx
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-6gd92 (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
default-token-6gd92:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-6gd92
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
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 14s 0/3 nodes are available: 3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
最後の2つのイベントは、出力情報から確認できます3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
どういう意味ですか?どういう意味ですか?
このプロンプトは、どのノードもスケジューリングを受け入れることができないことを示しています。
これはなぜですか?
3つのノードはすべてマスターノードであるため、ノードノードはまだ追加されていません。デフォルトでは、マスターは汚染され(汚染、後で説明)、マスターノードはスケジューリングを受信しません。
ここではテスト環境にいるため、ノードノードとしての冗長マシンはありません。マスターの汚染を手動で削除して、マスターノードにスケジューリングを受信させることができます。
次のコマンドで汚染情報を表示できます。
[root@k8s-master001 ~]# kubectl get no -o yaml | grep taint -A 5
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:10:40Z"
- apiVersion: v1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
status:
addresses:
- address: 10.26.25.20
--
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:30:25Z"
- apiVersion: v1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
status:
addresses:
- address: 10.26.25.21
--
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:35:43Z"
- apiVersion: v1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
status:
addresses:
- address: 10.26.25.22
node-role.kubernetes.io/master
以下に示すように汚れを取り除きます
[root@k8s-master001 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-
node/k8s-master001 untainted
node/k8s-master002 untainted
node/k8s-master003 untainted
次に、nginxのステータスを調べています。それはContainerCreatingになりました。つまり、ノードに割り当てられ、nginxのポッドが作成されました。
[root@k8s-master001 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 3m11s
kubectl get po -o wideを使用して、nginxが正常に実行されていることを確認します。nginxがk8s-master001ノードに割り当てられ、ポッドIPが10.244.0.4であることを確認できます。
[root@k8s-master001 ~]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 56m 10.244.0.4 k8s-master001 <none> <none>
今度はnginxを訪れて、おなじみの200が登場しました~~
[root@k8s-master001 ~]# curl -I 10.244.0.4
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:22:41 GMT
Content-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
ただし、自分のコンピュータなどの非クラスタノードで10.244.0.4にアクセスした場合
[~/b/] : curl -I 10.244.0.4
curl: (55) getpeername() failed with errno 22: Invalid argument
この問題を今解決してください、
1.最初に作成されたnginxポッドを削除します
[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:
app: nginx
spec:
serviceName: nginx
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 180
containers:
- name: nginx
image: nginx
imagePullPolicy: Always
ports:
- containerPort: 80
name: port
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: nginx
3. kubectl apply -f nginx.yaml deploymentを実行します
[root@k8s-master001 ~]# kubectl apply -f nginx.yaml
statefulset.apps/nginx created
service/nginx created
[root@k8s-master001 ~]# kubectl get po,ep,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-0 1/1 Running 0 24s
NAME ENDPOINTS AGE
endpoints/kubernetes 10.26.25.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 <none> 443/TCP 17h
service/nginx NodePort 10.106.27.213 <none> 80:30774/TCP 23s
これで、nginxという名前のサービスが作成され、nginxのデフォルトポート80が30774にマップさ
れ、クラスター内の任意のノードのIP にアクセスできることがわかります。32650、ここでは10.26.25.20:30774です。
クラスタノードへのアクセス:
[root@k8s-master001 ~]# curl -I 10.26.25.20:30774
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:53:55 GMT
Content-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
ラップトップでアクセス:
[~/b/wechatimages] : curl -I 10.26.25.20:30774
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:54:24 GMT
Content-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のサービスの概念を最初に理解できる場合。。。フォローアップ記事も次々にそれについて話します。。。
注:記事の画像はインターネットからのものです。侵害がある場合は、時間をかけて削除するように私に連絡してください。
ヒント:より良い記事については、一般の人に注意してください*「ルーキーの運用とメンテナンストーク」!!!