一、便携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/1NAME READY STATUS RESTARTS AGEnginx 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
结束!