Container Cloud Platform No.3〜kubernetesで使用

今日はその後、第三である継続します

まず、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

Container Cloud Platform No.3〜kubernetesで使用

この問題を今解決してください、

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


Container Cloud Platform No.3〜kubernetesで使用
ポッド、エンドポイント、kubernetesのサービスの概念を最初に理解できる場合フォローアップ記事も次々にそれについて話します。

注:記事の画像はインターネットからのものです。侵害がある場合は、時間をかけて削除するように私に連絡してください。
ヒント:より良い記事については、一般の人に注意してください*「ルーキーの運用とメンテナンストーク」!

おすすめ

転載: blog.51cto.com/1648324/2536148