基于Centos單機kubnetes環(huán)境部署
一.首先了解Kubernetes核心概率和功能:
Kubernetes集群包含有節(jié)點代理kubelet和Master組件(APIs, scheduler, etc),一切都基于分布式的存儲系統(tǒng)。下面這張圖是Kubernetes的架構(gòu)圖。

二.單機環(huán)境部署
1.配置yum源:
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo (另外設(shè)置yum源方式y(tǒng)um-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo)
查看服務(wù)器releasever和basearch
[root@docker yum.repos.d]# rpm -qi centos-release
Name : centos-release
Version : 7
Release : 1.1503.el7.centos.2.8
Architecture: x86_64
Install Date: Thu 05 Jul 2018 02:27:56 AM EDT
Group : System Environment/Base
Size : 34409
License : GPLv2
Signature : RSA/SHA256, Tue 31 Mar 2015 06:28:11 PM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : centos-release-7-1.1503.el7.centos.2.8.src.rpm
Build Date : Tue 31 Mar 2015 06:27:03 PM EDT
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
Summary : CentOS Linux release file
Description :
CentOS Linux release files
查看 basearch
x86_64
替換releasever版本
sed -i 's/$releasever/7/g' CentOS7-Base-163.repo
sed -i 's/$basearch/x86_64/g' CentOS7-Base-163.repo
2.關(guān)閉centos自帶防火墻和selinux
systemctl disable firewalld
systemctl stop firewalld
3.yum install -y etcd kubernetes
4.啟動相應(yīng)服務(wù):
systemctl start etcd
systemctl start docker
啟動docker 服務(wù)報錯
/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled refer#http://www.rzrgm.cn/amoyzhu/p/5261393.html
使用如下方式排錯
curl -fsSL https://get.docker.com/ | sh
# Executing docker install script, commit: 36b78b2
Warning: the "docker" command appears to already exist on this system.
If you already have Docker installed, this script can cause trouble, which is
why we're displaying this warning and provide the opportunity to cancel the
installation.
刪除上次docker目錄:
rm -rf /var/lib/docker/*
重新啟動dokcer服務(wù)正常。
三.使用kubernets創(chuàng)建RC和service
1.創(chuàng)建mysql-rc.yaml(參考kubernets說明文檔編寫mysql-rc.yaml文件https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller)
kubectl create -f mysql-rc.yaml
2.查看POD狀態(tài):
kubectl get pods
出現(xiàn)報錯No resources found.
檢查RC狀態(tài)
kubectl describe ReplicationController/mysql
Name: mysql
Namespace: default
Image(s): mysql
Selector: app=mysql
Labels: app=mysql
Replicas: 0 current / 3 desired
Pods Status: 0 Running / 0 Waiting / 0 Succeeded / 0 Failed
No volumes.
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
18m 0s 60 {replication-controller } Warning FailedCreate Error creating: No API token found for service account "default", retry after the token is automatically created and added to the service account
解決辦法是編輯/etc/kubernetes/apiserver 去除 KUBE_ADMISSION_CONTROL中的SecurityContextDeny,ServiceAccount,并重啟kube-apiserver.service服務(wù): #vim /etc/kubernetes/apiserver KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota" #systemctl restart kube-apiserver.service 之后重新創(chuàng)建pod:
3.重新創(chuàng)建POC服務(wù)后,POC創(chuàng)建成果。查看pods一直處于ContainerCreating狀態(tài)
[root@docker ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-5pffq 0/1 ContainerCreating 0 5h
mysql-93zg9 0/1 ContainerCreating 0 5h
mysql-h7frf 0/1 ContainerCreating 0 5h
docker未運行mysql進程
[root@docker ~]# docker ps |grep mysql
一直處于ContainerCreating狀態(tài),開始查找原因:
[root@docker ~]# kubectl describe pod mysql-5pffq
Name: mysql-5pffq
Namespace: default
Node: 127.0.0.1/127.0.0.1
Start Time: Mon, 09 Jul 2018 13:02:43 -0400
Labels: app=mysql
Status: Pending
IP:
Controllers: ReplicationController/mysql
Containers:
mysql:
Container ID:
Image: mysql
Image ID:
Port: 3306/TCP
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Volume Mounts: <none>
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
No volumes.
QoS Class: BestEffort
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
5h 1m 68 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"
5h 12s 1420 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""
嘗試手動pull image:
[root@docker ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...
open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory
進入:
/etc/docker/certs.d/registry.access.redhat.com/
查看到有個文件redhat-ca.crt -> /etc/rhsm/ca/redhat-uep.pem 一直在閃
[root@docker registry.access.redhat.com]# yum whatprovides */redhat-uep.pem
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
python-rhsm-certificates-1.19.10-1.el7_4.x86_64 : Certificates required to communicate with a Red Hat Unified Entitlement
: Platform
Repo : base
Matched from:
Filename : /etc/rhsm/ca/redhat-uep.pem
安裝rhsm
yum install -y python-rhsm-certificates-1.19.10-1.el7_4.x86_64
重新查看POD狀態(tài):
[root@docker registry.access.redhat.com]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-5pffq 0/1 ContainerCreating 0 5h
mysql-93zg9 0/1 ContainerCreating 0 5h
mysql-h7frf 0/1 ContainerCreating 0 5h
還是證書不存在:
[root@docker registry.access.redhat.com]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...
open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory
安裝完rhsm后證書依舊不存在
查看需要安裝的包python-rhsm-certificates-1.19.10-1.el7_4.x86_64被subscription-manager-rhsm-certificates-1.20.11-1.el7.centos.x86_64替代沒有生成證書文件
從centos鏡像網(wǎng)站下載對應(yīng)文件:
手動安裝:
rpm -ivh python-rhsm-certificates-1.19.10-1.el7_4.x86_64
再次查看/etc/rhsm/ca/redhat-uep.pem文件已經(jīng)生成
ll /etc/rhsm/ca/redhat-uep.pem
-rw-r--r-- 1 root root 7732 Oct 19 2017 /etc/rhsm/ca/redhat-uep.pem
[root@docker 7]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...
latest: Pulling from registry.access.redhat.com/rhel7/pod-infrastructure
26e5ed6899db: Already exists
66dbe984a319: Already exists
9138e7863e08: Already exists
Digest: sha256:92d43c37297da3ab187fc2b9e9ebfb243c1110d446c783ae1b989088495db931
Status: Image is up to date for registry.access.redhat.com/rhel7/pod-infrastructure:latest
4.創(chuàng)建mysql service:
kubectl create -f mysql-svc.yaml
查看POD狀態(tài)處于Pending 狀態(tài):
[root@docker ~]# kubectl describe pod mysql-1cg54
Name: mysql-1cg54
Namespace: default
Node: 127.0.0.1/127.0.0.1
Start Time: Mon, 09 Jul 2018 19:24:31 -0400
Labels: app=mysql
Status: Pending
IP:
Controllers: ReplicationController/mysql
Containers:
mysql:
Container ID:
Image: mysql
Image ID:
Port: 3306/TCP
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Volume Mounts: <none>
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
No volumes.
QoS Class: BestEffort
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
2m 2m 1 {default-scheduler } Normal Scheduled Successfully assigned mysql-1cg54 to 127.0.0.1
2m 2m 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/e59f2093257452779d9a17bcd555409d7e6b0492e2530d426494003083b081ff-init/merged: invalid argument\"}"
1m 1m 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/838d7c94495bcfbad3b668966a44acbd7e6468b3356835e47dc3d6325aa9b948-init/merged: invalid argument\"}"
1m 1m 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/9f00835eaa13507b4bf2674dec732d8814b076a989db644510c81e8442564e5e-init/merged: invalid argument\"}"
1m 1m 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/d7ff3025c0a133856be50007c53dde4e6ec87daa2d62a97cc6ce3494a3e641f4-init/merged: invalid argument\"}"
1m 1m 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/eb14878a8937c5d87cd83b19c51dd85ab5c7bff5cf93d367e8a55d36ef8c18a6-init/merged: invalid argument\"}"
52s 52s 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/cf31456fd3c3bddba7997c030ca4a9ead718711c2cd447005cd4214abe619788-init/merged: invalid argument\"}"
39s 39s 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/9cfe8f28521d55f020fbb5e02c10a6604d82800c4e48d1aac4c66ec71fd4edf2-init/merged: invalid argument\"}"
28s 28s 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/c044367cb344a42a9df4fe809344950e575013b9bcc920416a53c489bd5f74dd-init/merged: invalid argument\"}"
17s 17s 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with RunContainerError: "runContainer: Error response from daemon: {\"message\":\"error creating overlay mount to /var/lib/docker/overlay2/e852c1fef7eed8db0567052818a4f4f71bdffccc216a747d92ea0d78492347f1-init/merged: invalid argument\"}"
2m 5s 10 {kubelet 127.0.0.1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
5s 5s 1 {kubelet 127.0.0.1} Warning FailedSync (events with common reason combined)
報錯是因為用的overlay2文件系統(tǒng),而系統(tǒng)默認只能識別overlay文件系統(tǒng)
所以我們就要更新文件系統(tǒng)了
#systemctl stop docker //停掉docker服務(wù)
#rm -rf /var/lib/docker //注意會清掉docker images的鏡像
#vi /etc/sysconfig/docker-storage //將文件里的overlay2改成overlay即可
例:DOCKER_STORAGE_OPTIONS="--storage-driver overlay "
再次創(chuàng)建mysql service:
kubectl create -f mysql-svc.yaml

浙公網(wǎng)安備 33010602011771號