kubernetes創建pod

一、便攜pod yml文件

$ vim k8s_pod.yml
apiVersion: v1 #定義k8s api的版本v1
kind: Pod #kind資源 Pod
metadata: #屬性,名字叫nginx,標籤叫app : web(鍵值對)
  name: nginx
  labels:
    app: web
spec: #詳細
  containers: #容器信息
    - name: nginx #容器叫nginx
      image: nginx:latest #使用的鏡像,這樣是使用本地nginx鏡像,當然可以使用私有倉庫鏡像*.*.*.*:5000/nginx:latest
      ports: #容器開放的端口
        - containerPort: 80

二、鏡像準備工作

下載鏡像,並推送到私有鏡像倉庫

$ docker pull nginx$ docker tag nginx:latest *.*.*.*:5000/nginx:latest$ docker push *.*.*.*:5000/busybox:latest

三、創建pod

$ kubectl create -f k8s_pod.yml
如果報錯,請修改 :
$ vim /etc/kubernetes/apiserver
刪除ServiceAccount字段
重啓kubernetes服務
$ systemctl restart kube-apiserver.service

四、查詢pod創建情況

$ kubectl get pod #一直處於創建,肯定不正常,正常應該是1/1
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 4m

 五、發現錯誤

kubectl describe pod nginx

發現如下錯誤:

六、解決

修改kubernetes配置,改成私倉地址

1: 下載 官方的rpm
$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
2: 導入
$ rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
3:安裝完成後,我們把這個鏡像 pull下來 ,鏡像有點大,下載會比較慢
$ docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
4: 打tag 把 pod-infrastructure:latest 傳到我們的私有倉庫,
$ docker tag registry.access.redhat.com/rhel7/pod-infrastructure:latest *.*.*.*:5000/pod-infrastructure:latest
$ docker push *.*.*.*:5000/pod-infrastructure:latest
5:如下操作,在所有節點node-1、Node-2上面操作
修改k8s配置,把紅帽官網的下載地址,改成我們的私有倉庫的鏡像地址
$ vim /etc/kubernetes/kubelet
# /etc/kubernetes/kubelet
# pod infrastructure container
# 將
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
# 替換成下方的內容
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=*.*.*.*:5000/pod-infrastructure:latest"

七、重啓kubelet

systemctl restart kubelet.service

八、重啓Pod

在有yaml文件的情況下可以直接使用 kubectl replace --force -f xxx.yaml 來強制替換Pod的API對象,從而達到重啓的目的。

kubectl replace --force -f k8s_pod.yaml 

九、查看Pod狀態

$ kubectldescribe pod nginx
Name:        nginx
Namespace:    default
Node:        k8s-node-2/*.*.*.*
Start Time:    Wed, 19 Jan 2022 14:42:51 +0800
Labels:        app=web
Status:        Running
IP:        10.0.4.3
Controllers:    <none>
Containers:
  nginx:
    Container ID:        docker://a7416c09733f7d2eab1a62a6fcc12239d68c6de48386015b48c20
    Image:            nginx:latest
    Image ID:            docker-pullable://docker.io/nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a1
    Port:            80/TCP
    State:            Running
      Started:            Wed, 19 Jan 2022 14:42:59 +0800
    Ready:            True
    Restart Count:        0
    Volume Mounts:        <none>
    Environment Variables:    <none>
Conditions:
  Type        Status
  Initialized     True
  Ready     True
  PodScheduled     True
No volumes.
QoS Class:    BestEffort
Tolerations:    <none>
Events:
  FirstSeen    LastSeen    Count    From            SubObjectPath        Type        Reason            Message
  ---------    --------    -----    ----            -------------        --------    ------            -------
  18s        18s        1    {default-scheduler }                Normal        Scheduled        Successfully assigned nginx to k8s-node-2
  17s        17s        1    {kubelet k8s-node-2}    spec.containers{nginx}    Normal        Pulling            pulling image "nginx:latest"
  18s        10s        2    {kubelet k8s-node-2}                Warning        MissingClusterDNS    kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
  10s        10s        1    {kubelet k8s-node-2}    spec.containers{nginx}    Normal        Pulled            Successfully pulled image "nginx:latest"
  10s        10s        1    {kubelet k8s-node-2}    spec.containers{nginx}    Normal        Created            Created container with docker id a7416c09733f; Security:[seccomp=unconfined]
  10s        10s        1    {kubelet k8s-node-2}    spec.containers{nginx}    Normal        Started            Started container with docker id a7416c09733f
$ kubectl get pod
NAME      READY     STATUS    RESTARTS   AGE
nginx     1/1       Running   0          36m
$ kubectl get pod -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP         NODE
nginx     1/1       Running   0          36m       10.0.4.3   k8s-node-2

結束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章