Kubernetes使用問題總結

加快Kubernetes編譯速度

除了linux/amd64,默認還會爲其他平臺做交叉編譯。爲了減少編譯時間,可以修改hack/lib/golang.sh,把KUBE_SERVER_PLATFORMS, KUBE_CLIENT_PLATFORMS和KUBE_TEST_PLATFORMS中除linux/amd64以外的其他平臺註釋掉

gcr.io無法訪問

Kubernetes在創建Pod的時候,需要從gcr.io下載一個helper鏡像(目前是 gcr.io/google_containers/pause-amd64:3.0 )。
但是目前國內無法訪問gcr.io,這個問題會導致無法下載該鏡像,然後Pod一直處於ContainerCreating狀態。

解決辦法

1) 在可以訪問gcr.io的地方

docker pull gcr.io/google_containers/pause-amd64:3.0

傳到私有docker registry

docker tag gcr.io/google_containers/pause-amd64:3.0 k8s-docker.mydomain.com/google_containers/pause-amd64:3.0

docker push k8s-docker.mydomain.com/google_containers/pause-amd64:3.0

2) 在所有的k8s節點

docker pull k8s-docker.mydomain.com/google_containers/pause-amd64:3.0
docker tag k8s-docker.mydomain.com/google_containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

Note

不通過私有registry中轉,而是使用docker save/load應該也可以(未測試),只是比較麻煩。

從集羣外訪問Service和Pod

這裏說的集羣外是指K8s集羣以外的主機,比如使用nginx/HAProxy搭建的負載均衡主機。這些主機跟K8s集羣部署在一起,到K8s網絡可達。
對於不是部署在GCE以及AWS等雲平臺的K8s,我們一般需要自己搭建負載均衡,然後分發請求到到Service。
使用NodePort方式發佈服務,那麼負載均衡主機上不需要額外配置;使用ClusterIP方式,爲了能夠訪問Service的ClusterIP, 需要在這些主機上安裝Flanneld和kube-proxy


坑1:

IPV4 forwording報錯,但是容器運行正常。

[root@registry mnt]# docker run -d -p 5000:5000 -v /mnt/date/registry registry

WARNING: IPv4 forwarding is disabled. Networking will not work.

970e18480c47661fd2cffab9f7e0410989e62ed9d229333cb32e5727a2e88b3b

 

解決方案:

在/etc/sysctl.conf文件中加入net.ipv4.ip_forward=1並重啓網絡服務。


修改後正常:

[root@registry mnt]# docker run -d -p 5000:5000 -v /mnt/date/registry registry

abbec57e5dca734689cfd953f27564156ec24e32ae6e532043309f0332653650

[root@registry mnt]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

abbec57e5dca        registry            "/entrypoint.sh /etc/"   31 seconds ago      Up 30 seconds       0.0.0.0:5000->5000/tcp   compassionate_mclean


坑2:

查看鏡像存放位置顯示404 page not found網上很多教程都是下面這個命令

[root@docker01 ~]# curl http://10.100.50.122:5000/v2/search

404 page not found

通過docker search registry發現安裝的是2.0版本

[root@etcd registry]# docker search docker-registry

INDEX      NAME          DESCRIPTION                         STARS     OFFICIAL   AUTOMATED

docker.io docker.io/alpine    A minimal Docker image based on Alpine Lin...   3733      [OK]       

docker.io docker.io/registry  The Docker Registry 2.0 implementation for...    2031      [OK]   

V2的命令格式如下:

[root@docker01 ~]# curl http://10.100.50.122:5000/v2/_catalog

{"repositories":["busybox","centos"]}


坑3:

[root@k8s-master demo]# docker pull 10.0.0.10:5000/busybox

Using default tag: latest

Trying to pull repository 10.0.0.10:5000/busybox ... 

Get https://10.0.0.10:5000/v1/_ping: http: server gave HTTP response to HTTPS client


[root@k8s-master demo]# vi /etc/sysconfig/docker

需要檢查客戶端

OPTIONS='--selinux-enabled --insecure-registry 10.0.0.10:5000'



坑4:

[root@k8s-master demo]# cat /etc/kubernetes/kubelet

###

# kubernetes kubelet (minion) config


# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)

KUBELET_ADDRESS="--address=127.0.0.1"


# The port for the info server to serve on

# KUBELET_PORT="--port=10250"


# You may leave this blank to use the actual hostname

KUBELET_HOSTNAME="--hostname-override=127.0.0.1"


# location of the api-server

KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"


# 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=kube-registry:5000"


# Add your own!

KUBELET_ARGS=""


KUBELET_POD_INFRA_CONTAINER

Pod 啓動時的一個基礎容器,你可以通過Dokcer ps -a命令看到這個容器,類似windows系統服務,供kubenetes內部使用。


這個是一個基礎容器,每一個Pod啓動的時候都會啓動一個這樣的容器。如果你的本地沒有這個鏡像,kubelet會連接外網把這個鏡像下載下來。最開始的時候是在Google的registry上,因此國內因爲GFW都下載不了導致Pod運行不起來。現在每個版本的Kubernetes都把這個鏡像打包,你可以提前傳到自己的registry上,然後再用這個參數指定。


[root@k8s-master demo]# kubectl get pod

NAME      READY     STATUS         RESTARTS   AGE

busybox   0/1       ContainerCreating   0          36m


這是導致STATUS的狀態始終無法running的根本原因









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