Centos7单机版Kubernete安装

单机版K8S

安装

1.关闭centos自带的防火墙
# systemctl disable firewalld
# systemctl stop firewalld 

2.安装etcd和kubernetes软件(会自动安装docker)
yum install -y etcd kubernetes 

修改配置文件

Docker配置文件/etc/sysconfig/docker
内容改为如下 OPTIONS=’–selinux-enabled=false --insecure-registry gcr.io

vim /etc/sysconfig/docker 

Kubernetes apiservce配置文件/etc/kubernetes/apiserver
去掉–admission-control中的ServiceAccount

vim /etc/kubernetes/apiserver 

启动服务

systemctl start etcd.service
systemctl start docker
systemctl start kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl start kubelet.service
systemctl start kube-proxy.service 
mkdir /data

创建pod

vim mysql-rc.yaml

贴入如下内容

apiVersion: v1
kind: ReplicationController
metadata:
    name: mysql
spec:
    replicas: 1
    selector:
        app: mysql
    template:
        metadata:
            labels:
                app: mysql
        spec:
            containers:
                - name: mysql
                  image: mysql
                  ports:
                      - containerPort: 3306
                  env:
                      - name: MYSQL_ROOT_PASSWORD
                        value: "root"

MYSQL_ROOT_PASSWORD 表示root配置密码是root

创建pod

kubectl create -f mysql-rc.yaml
kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
mysql     1         1         0         12m



kubectl get pods

NAME          READY     STATUS              RESTARTS   AGE
mysql-zqgck   0/1       ContainerCreating   0          13m

发现status一直处于ContainerCreating状态!!!

kubectl describe pod mysql (该命令用于排查上面状态一直卡在ContainerCreating的情况)

Name:       mysql-zqgck
Namespace:  default
Node:       127.0.0.1/127.0.0.1
Start Time: Tue, 05 Jun 2018 10:25: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:
      MYSQL_ROOT_PASSWORD:  123456
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
  --------- --------    -----   ----            -------------   --------    ------      -------
  14m       14m     1   {default-scheduler }            Normal      Scheduled   Successfully assigned mysql-zqgck to 127.0.0.1
  14m       3m      7   {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)"

  14m   4s  60  {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\""
 

问题处理:手动下载使用使用docker pull 拉取镜像

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

如果缺少rhsm

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm 
chmod +x 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/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

删除pod 并重新创建

kubectl delete -f mysql-rc.yaml

kubectl create -f mysql-rc.yaml

查看pod状态如下,running说明已经运行起来了

kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
mysql     1         1         1         1m
- kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
mysql-gtcj4   1/1       Running   0          12s

docker ps查看运行的容器:

docker ps | grep mysql

创建服务

创建service文件

vim mysql-svc.yaml

配置信息


apiVersion: v1
kind: Service
metadata:
    name: mysql
spec:
    ports:
        - port: 3306
    selector:
        app: mysql

创建service

kubectl create -f mysql-svc.yaml
kubectl get svc
NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   10.254.0.1      <none>        443/TCP    1h
mysql        10.254.65.184   <none>        3306/TCP   14s

即可看到运行的进程

docker ps| grep mysql
或者
systemctl status etcd.service 

这个还顺利,直接就ok了

集群

准备

所有的操作均需要root权限,请在执行时加sudo或者su到root账号下,在安装的时候请记得把防火墙关闭并设置iptables开放2379端口和8080端口。如果在实验环境下可以直接将iptables也关闭了。

集群环境介绍
至少三台机器

三台主机的职责如下所示:

IP节点etcd serverkubernetes serverkubernetes clientdocker
192.168.163.148masterYesYesYesYes
192.168.163.150node--YesYes
192.168.163.138node--YesYes

单机环境

IP节点etcd serverkubernetes serverkubernetes clientdocker
192.168.163.148masterYesYesYesYes

这里我们只安装单机环境,基本流程都包含在这里了。

安装步骤

1)关闭CentOS自带的防火墙服务:

systemctl disable firewalld
systemctl stop firewalld

如果你之前安装过docker,请先卸载,重复安装会报错,如下:
docker-ce conflicts with 2:docker-1.13.1-68
错误原因:(https://stackoverflow.com/questions/44891775/kubernetes-installation-on-centos7)

According to the documentation, Kubernetes is not yet compatible with docker-ce (docker >=17.x)

On each of your machines, install Docker. Version 1.12 is recommended, but v1.10 and v1.11 are known to work as well. Versions 1.13 and 17.03+ have not yet been tested and verified by the Kubernetes node team.

解决方法:
卸载docker-ce步骤如下

1、查看安装过的docker:yum list installed | grep docker

2、卸载docker:yum remove -y docker-ce.x86_64 0:18.03.0.ce-1.el7.centos

3、删除容器镜像:rm -rf /var/lib/docker

##安装etcd和Kubernetes软件

全安装命令(单机版,会自动依赖安装Docker软件)
yum install -y etcd kubernetes

master只装主节点的方式如下:
yum install etcd kubernetes-master docker-y

node节点(不需要etc和kub-master)
yum install kubernetes-node flannel docker -y

安装完成结果如下

Installed:
etcd.x86_64 0:3.2.22-1.el7 kubernetes.x86_64 0:1.5.2-0.7.git269f928.el7

Dependency Installed:
conntrack-tools.x86_64 0:1.4.4-3.el7_3 container-storage-setup.noarch 0:0.10.0-1.gitdf0dcd5.el7 device-mapper-event.x86_64 7:1.02.146-4.el7
device-mapper-event-libs.x86_64 7:1.02.146-4.el7 device-mapper-persistent-data.x86_64 0:0.7.3-3.el7 docker.x86_64 2:1.13.1-68.gitdded712.el7.centos
docker-client.x86_64 2:1.13.1-68.gitdded712.el7.centos docker-common.x86_64 2:1.13.1-68.gitdded712.el7.centos kubernetes-client.x86_64 0:1.5.2-0.7.git269f928.el7
kubernetes-master.x86_64 0:1.5.2-0.7.git269f928.el7 kubernetes-node.x86_64 0:1.5.2-0.7.git269f928.el7 libaio.x86_64 0:0.3.109-13.el7
libnetfilter_cthelper.x86_64 0:1.0.0-9.el7 libnetfilter_cttimeout.x86_64 0:1.0.0-6.el7 libnetfilter_queue.x86_64 0:1.0.2-2.el7_2
lvm2.x86_64 7:2.02.177-4.el7 lvm2-libs.x86_64 7:2.02.177-4.el7 oci-register-machine.x86_64 1:0-6.git2b44233.el7
oci-systemd-hook.x86_64 1:0.1.16-1.git05bd9a0.el7 oci-umount.x86_64 2:2.3.3-3.gite3c9055.el7 skopeo-containers.x86_64 1:0.1.31-1.dev.gitae64ff7.el7.centos
socat.x86_64 0:1.7.3.2-2.el7 yajl.x86_64 0:2.0.4-4.el7

Dependency Updated:
container-selinux.noarch 2:2.66-1.el7 device-mapper.x86_64 7:1.02.146-4.el7 device-mapper-libs.x86_64 7:1.02.146-4.el7 libselinux.x86_64 0:2.5-12.el7
libselinux-python.x86_64 0:2.5-12.el7 libselinux-utils.x86_64 0:2.5-12.el7 libsemanage.x86_64 0:2.5-11.el7 libsemanage-python.x86_64 0:2.5-11.el7
libsepol.x86_64 0:2.5-8.1.el7 policycoreutils.x86_64 0:2.5-22.el7 policycoreutils-python.x86_64 0:2.5-22.el7 selinux-policy.noarch 0:3.13.1-192.el7_5.4
selinux-policy-targeted.noarch 0:3.13.1-192.el7_5.4 setools-libs.x86_64 0:3.3.8-2.el7

Complete!

配置文件修改

安装好软件后,修改2个配置文件(其他配置文件使用系统默认的参数即可)

1)docker配置文件为 /etc/sysconfig/docker,其中OPTIONS的内容设置为

OPTION=’–selinux-enable=false --insecure-registry gcr.io

关闭selinux,安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

如果服务器可以访问外网,则可在docker daemon的启动参数中加上–insecure-registry gcr.io

2)Kubernetes apiserver 配置文件为/etc/kubernetes/apiserver,把KUBE_ADMISSION_CONTROL参数中的ServiceAccount删除。

# default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

kubernetes安全机制–Admission Control 准入控制

在kubernetes中,一些高级特性正常运行的前提条件为,将一些准入模块处于enable状态。总结下,对于kubernetes apiserver,如果不适当的配置准入控制模块,他就不能称作是一个完整的server,某些功能也不会正常的生效。

ServiceAccount

一个serviceAccount为运行在pod内的进程添加了相应的认证信息。

当准入模块中开启了此插件(默认开启),如果pod没有serviceAccount属性,将这个pod的serviceAccount属性设为“default”;确保pod使用的serviceAccount始终存在;

如果LimitSecretReferences 设置为true,当这个pod引用了Secret对象却没引用ServiceAccount对象,弃置这个pod;

如果这个pod没有包含任何ImagePullSecrets,则serviceAccount的ImagePullSecrets被添加给这个pod;
如果MountServiceAccountToken为true,则将pod中的container添加一个VolumeMount 。

4)按顺序启动所有的服务:

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

至此,一个单机版的Kubernetes集群环境就安装启动完成了。

查看节点数量

#kubectl get nodes
NAME        STATUS    AGE
127.0.0.1   Ready     1m

可以看到只有一个节点

参考资料

单机版参考
https://blog.youkuaiyun.com/yjf2013/article/details/80609468
集群搭建参考
https://blog.youkuaiyun.com/yjf2013/article/details/80636475
https://blog.youkuaiyun.com/yang7551735/article/details/51172179

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值