K8S安装的最简单方法

Kubernetes的单机版安装(CentOS7) - 知乎

环境准备

本文主要针对CentOS7的系统,其他Linux系统与之类似,但是可以部分使用方式上存在一定差异。

步骤1:CentOS系统自带的防火墙服务:

  1. systemctl disable firewalld
  2. systemctl stop firewalld

步骤2:安装etcd和Kubernetes(自动附带安装Docker)

  1. yum install -y etcd kubernetes

步骤3:修改/etc/sysconfig/docker文件。
修改OPTIONS的内容为:

  1. OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'

其他内容保持原样即可。

步骤4:修改/etc/kubernetes/apiserver文件
修改KUBE_ADMISSION_CONTROL的内容为:

  1. KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

其他内容保持原样即可。

步骤4:依次启动下列服务:

  1. systemctl start etcd
  2. systemctl start docker
  3. systemctl start kube-apiserver
  4. systemctl start kube-controller-manager
  5. systemctl start kube-scheduler
  6. systemctl start kubelet
  7. systemctl start kube-proxy

至此,一个单机版的Kubernetes环境已经搭建完成了。
我们可以利用该环境进行Kubernetes功能的学习和使用。

命令汇总

systemctl disable firewalld
systemctl stop firewalld
yum install -y etcd kubernetes
vi /etc/sysconfig/docker
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'
vi /etc/kubernetes/apiserver
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy

基本功能演示

下面,我们来使用一些基本的命令来验证一下我们的环境是正常的。
准备一个如下的配置文件mysql-rc.yaml

  1. apiVersion: v1
  2. kind:ReplicationController
  3. metadata:
  4. name: mysql
  5. spec:
  6. replicas:1
  7. selector:
  8. app: mysql
  9. template:
  10. metadata:
  11. labels:
  12. app: mysql
  13. spec:
  14. containers:
  15. - name: mysql
  16. image: mysql
  17. ports:
  18. - containerPort:3306
  19. env:
  20. - name: MYSQL_ROOT_PASSWORD
  21. value:"123456"

下面,我们来启动该服务:

  1. kubectl create -f mysql-rc.yaml

命令执行后,我们可以执行如下命令看查询RC列表:

  1. kubectl get rc
  2. # NAME DESIRED CURRENT READY AGE
  3. # mysql 1 1 0 6m

从结果中,我们可以看到,我们的RC的READY数目始终为0,说明没有正常启动。
下面,我们需要去定位一下原因:

  1. kubectl describe pod mysql
  2. Events:
  3. FirstSeenLastSeenCountFromSubObjectPathTypeReasonMessage
  4. ------------------------------------------------------------
  5. 1h24m17{kubelet 127.0.0.1}WarningFailedSyncError syncing pod, skipping: failed to "StartContainer"for"POD"withErrImagePull:"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)"
  6. 1h19m291{kubelet 127.0.0.1}WarningFailedSyncError syncing pod, skipping: failed to "StartContainer"for"POD"withImagePullBackOff:"Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""

从Events事件上,我们可以看到提示以下两个错误:

  1. 找不到/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt文件。
  2. 拉取镜像registry.access.redhat.com/rhel7/pod-infrastructure:latest失败。

实际上,原因2是由于原因1导致的,因为拉取pod-infrastructure镜像时,要求redhat-ca.crt文件,而在本地中没有找到该文件。

问题解决方案

切换到/etc/docker/certs.d/registry.access.redhat.com/目录下,我们可以看到:


也就是说redhat-ca.crt实际上是指向/etc/rhsm/ca/redhat-uep.pem,而/etc/rhsm/ca/redhat-uep.pem文件本身不存在。

获取该文件的方式如下:

  1. wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
  2. rpm -ivh python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

现在在看一下,是不是/etc/rhsm/ca/redhat-uep.pem已经存在了呢?

如果提示python-rhsm-certificates-1.19.10-1.el7_4.x86_64 被已安装的 subscription-manager-rhsm-certificates-

1.20.11-1.el7.centos.x86_64 取代,就要执行下面两步骤:

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm |cpio -iv --to-stdout ./etc/rhsm/ca/redhatuep.pem > /etc/rhsm/ca/redhat-uep.pem

配置docker加速器

vi /etc/docker/daemon.json//加入如下内容

{undefined

"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]

}


下面,为了解决第2个问题,我们可以手动拉取该镜像:

  1. docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

拉取过程中可能稍微有些慢,耐心等待即可。
等待镜像拉取完成后,我们可以重新启动之前的RC:

  1. # 删除之前启动的RC
  2. kubectl delete-f mysql-rc.yaml
  3. # 重新启动新的RC
  4. kubectl create -f mysql-rc.yaml

稍等片刻,查看POD状态:


可以看到,我们的POD已经正常启动了。

最后,可以使用docker ps查看目前启动的容器:


可以看到,目前启动了两个容器:1个是MySQL容器,还有一个是Kubenetes自带的k8s_POD相关的容器(用于管理POD)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值