一、便攜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
結束!