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

结束!

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