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

Kubernetes指南-倪朋飞.pptx 1-唐继元Kubernetes Master High Availability 高级实践.pdf 2、刘淼-基于 DevOps、微服务及k8s的高可用架构探索与实现.pdf ArchSummit北京2016-《网易蜂巢基于万节点Kubernets支撑大规模云应用实践》-刘超.pdf Azure Service Broker_cn - Rita Zhang.pdf google/ HPE李志霄 Kubernetes企业级容器云:加速数字创新-20170407.pdf IBM马达:Kubernetes 中基于策略的资源分配.pdf k8s资料.rar Kubernetes Cookbook-Packt Publishing(2016).pdf Kubernetes Microservices with Docker-Apress2016.pdf Kubernetes on Azure - Gabe Monroy.pdf Kubernetes1.6集群部署完全指南——二进制文件部署开启TLS基于CentOS7.pdf Kubernetes1-4版本新增加功能介绍.pdf Kubernetes监控与日志.pdf kubernetes容器云平台实践-李志伟v1.0.pdf Kubernetes生态系统现状报告.pdf Kubernetes下API网关的微服务实践 长虹集团-李玮演讲PPT.pdf Kubernetes与EcOS的碰撞结合 成都精灵云-张行才演讲PPT.pdf Kubernetes与OpenStack融合支撑企业级微服务架构.pdf Kubernetes在华为全球IT系统中的实践.pdf Kubernetes在企业中的场景运用及管理实践.pdf Kubernetes指南-倪朋飞.pdf Kubernetes指南-倪朋飞.pptx l.txt Lessons+learned+and+challenges+faced+while+running+Kubernetes+at+scale.pdf rkt与Kubernetes的深度融合.pdf rkt与Kubernetes的深度融合.pptx SACC2017FabricOnKubernetesChinese.pdf ThoughtWorks林帆-白话Kubernetes网络.pdf 百度云PaddlePaddle on kubernetes-周倜.pdf 从Borg到Kubernetes-PaaS产品设计-华为-钟成.pdf 改造Kuberntetes打造SAE容器云.pdf 跟谁学-基于容器的持续集成平台建设.pdf 谷歌深度学习在Kubernetes上的实践.pptx 惠普基于Kubernetes的容器私有云平台实践.pdf 基于Kubernetes的模板化应用编排.pdf 基于kubernetes的容器云平台设计与实践-邓德源.pdf 基于Kubernetes的私有容器云建设实践-易宝支付.pdf 基于Kubernetes构建AI业务生态.pdf 李波:小米生态云应用引擎实践.pdf 魅族容器云平台基于 k8s 的自动化运维实践-曾彬.pdf 欧昌华-基于 Nginx 的负载均衡器在 K8S 中的实践.pdf 彭超:瓜子云的落地.pdf 如何落地TensorFlow on Kubernetes.pdf 如何用OpenStack和Kubernetes快速搭建一个容器和虚拟机组合服务的云平台.pptx 孙杰:大型企业云平台架构演进的实践之路.pdf 微服务道与术-敖小剑.pdf 微软Azure云助力微服务-赵文婧.pdf 颜卫-腾讯云容器服务基于kubernetes的应用编排实践-final-v1.0.pptx 有容云邓绍军-Kubernetes落地实践.pptx 折800如何用Docker&Kubernetes;构建自动化测环境.pdf
### 离线环境下 Kubernetes 单机版部署方法 #### 微软 Azure 容器注册表 (ACR) 和本地镜像缓存 为了实现离线环境下的 Kubernetes 集群部署,可以通过预先下载所需的容器镜像并将其导入到目标机器上来完成。对于 MicroK8s 的部署,虽然其官方镜像托管在 `gcr.io` 上[^1],但在国内网络环境中可能存在访问困难的情况。因此,建议采用以下方式解决: 1. **提前拉取所需镜像** 在能够连接外网的主机上,先手动拉取 MicroK8s 所需的所有 Docker 镜像,并保存为 `.tar` 文件以便后续传输至离线环境。 ```bash docker pull registry.k8s.io/pause:3.6 docker save -o pause.tar registry.k8s.io/pause:3.6 ``` 2. **将镜像文件复制到离线环境** 使用 USB 存储设备或其他物理介质,将上述导出的 `.tar` 文件拷贝到目标离线服务器。 3. **加载镜像到本地 Docker 环境** 将这些镜像重新加载到目标机器上的 Docker 中: ```bash docker load < pause.tar ``` 4. **配置 MicroK8s 使用本地镜像仓库** 如果需要进一步优化,可以在离线环境中设置私有镜像仓库(如 Harbor 或者简单的 Docker Registry),并将所有依赖的镜像推送到该仓库中。随后修改 MicroK8s 的配置以指向此私有仓库。 #### Minikube 的离线安装方案 Minikube 是另一种流行的单节点 Kubernetes 解决方案,在离线场景下也可以按照类似的流程操作。以下是具体步骤: 1. **获取 Minikube 及相关组件二进制文件** 访问官网或者 GitHub Release 页面下载最新版本的 Minikube 二进制文件以及对应的 Hypervisor 工具(例如 VirtualBox、Docker Desktop)。注意选择与操作系统匹配的版本。 2. **同步必要的附加插件和驱动程序** 包括但不限于 CNI 插件、CSI 驱动等基础功能模块。同样地,利用在线机器先行抓取再转移的方式处理这些问题资产。 3. **初始化集群前验证环境变量设置正确无误** 特别关注 KUBECONFIG 路径定义是否合理;另外确认 kubelet/kubectl 命令工具链已经就绪可用状态。 #### 实际案例分析——基于 Ubuntu 平台的操作指南 假设我们正在一台纯净安装的 Ubuntu Server LTS 系统之上实施整个过程,则完整的脚本可能如下所示: ```bash #!/bin/bash # Step A: Install prerequisites packages. sudo apt update && sudo apt install snapd curl wget git jq -y # Step B: Download pre-built binaries of required software components. wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \ -O /usr/local/bin/minikube; chmod +x /usr/local/bin/minikube # Step C: Transfer previously saved container images into local storage area. for img in $(ls *.tar); do docker load < "$img" done # Step D: Start up the single-node cluster with customized options. minikube start --vm-driver=none --extra-config=kubeadm.ignore-preflight-errors=all ``` 以上代码片段展示了如何通过一系列自动化指令快速构建起一个基本形态的小型 Kubernetes 测试平台[^2][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值