1. 首页
  2. DevOps

K8S平台部署

K8S主要是用于对容器(Docker容器)进行自动化的运维云计算平台,对容器实现:部署、调度、创建、销毁、重启、停止等操作。

K8S云计算管理平台,有命令行方式管理,同时也提供WEB-UI界面的管理,可以让运维人员快速、高效的对服务器集群(容器)管理,可以将Docker技术看成是K8S项目平台中的(低级别)组件。

Kubernetes技术的用途&特点:

  • 对Docker容器自动的部署和复制;
  • 可以随时扩展或缩容Docker容器的规模;
  • 将Docker容器组成一个组(集群),提供集群间的负载均衡;
  • 很方便的对Docker容器内容升级&更新容器中数据;
  • 可以提供Docker容器的弹性,如果某个容器失效就替换它等

K8S云计算平台主要是由Master端(服务端)、Minion端(客户端)组成,Master端通常只需要1台服务器即可,Minion端由一台、 无数台组成,相当于C/S架构。

K8S Master端(服务端)服务组件&组成

①Kubelet Master主要对外提供统一管理入口API,通过API入口可以管理和控制 Minion集群节点。

②Api-server 主要是用户和K8S集群的管理入口,提供一些增删改查的操作指令, 基于REST风格来管理的,封装一个管理入口,所有的操作必须经过API 接口。

③Scheduler 主要是用于提供集群资源调度的,当一台Minion节点奔溃,可以将节点上的容器在其他的节点快速启动,保证服务访问不受影响。当该节点资源满了,会将创建容器的请求发送至空余的节点。

④Controller-Manager 主要是用于控制Minion节点上的容器数量的,当其中一个容器挂掉之后,会瞬间再启动一个容器,永远保证规定容器数量在运行。

K8S Minion端(客户端)服务组件&组成:

①Kubelet 主要是用于和Minion节点上Docker引擎进行交互的,用于管理Docker 引擎服务,可以向Docker引擎发送各种指令:创建、删除、停止、重 启、更新容器等。

②Proxy 主要是用于将宿主机(VIP|访问IP)和容器进行映射关系的,可以将 VIP+PORT映射至容器集群中,通过VIP可以负载均衡访问集群容器。

K8S集群系统其它组件&组成:

①Etcd被称为K(key)-V(values)内存|硬盘数据库,类似Redis数据库,主要是用于存储K-V信息的,存储K8S集群中Docker容器IP、容器 id、映射关系、节点之间的网络信息等。

②Flannel 主要是由Core OS团队开发的一款网络工具,是用于打通K8S不同节点之间的网络的,可以使不同节点上Docker容器的IP地址处于同一个二层网络中,可以打通所有节点之间的网络,让用户无需关心K8S的互联、互通问题。

K8S平台部署:

环境准备:

master     172.20.10.8

node节点  172.20.10.9

etcd节点   172.20.10.10

每台主机运行以下命令:

systemctl stop firewalld
systemctl disable firewalld
yum -y install ntp
ntpdate pool.ntp.org
systemctl start ntpd
systemctl enable ntpd




一、etcd节点

yum -y install etcd

编辑/etc/etcd/etcd.conf 如下(以下配置文件过滤了#注释行):

ETCD_NAME=etcd1
ETCD_DATA_DIR="/data/etcd"
ETCD_LISTEN_PEER_URLS="http://172.20.10.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.20.10.10:2379,http://127.0.0.1:2379"
ETCD_MAX_SNAPSHOTS="5"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.20.10.10:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://172.20.10.10:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.20.10.10:2379"

mkdir  -p  /data/etcd/;chmod 757 -R /data/etcd/

启动etcd,设置开机自启:

systemctl restart etcd  ;  systemctl enable etcd

netstat -tnlp查看监听端口;ps -ef | grep etcd查看进程

K8S平台部署




二、master端:

yum install kubernetes-master flannel -y

开始编辑配置文件:

grep -v ‘#’ /etc/kubernetes/apiserver  如下:

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://172.20.10.10:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
KUBE_API_ARGS=""

grep -v ‘#’ /etc/kubernetes/config 如下:

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://172.20.10.8:8080"

启动 apiserver, controller-manager和scheduler进程、加入开机自启及查看运行状态:

for  I  in   kube-apiserver  kube-controller-manager kube-scheduler;  do
systemctl restart  $I
systemctl enable  $I
systemctl status  $I
done

三个进程显示 active (running),查看端口:

K8S平台部署




三、接着配置node节点:

yum install kubernetes-node  docker flannel *rhsm* -y

编辑配置文件:

grep -v ‘#’ /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://172.20.10.8:8080"

grep -v ‘#’ /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=172.20.10.9"
KUBELET_API_SERVER="--api-servers=http://172.20.10.8:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

重启三个服务并加入开机自启:

for  I  in  kube-proxy  kubelet  docker
do
systemctl  restart  $I
systemctl  enable  $I
systemctl  status  $I
done

查看端口:

K8S平台部署




四、etcd节点创建flannel网络配置

选择性执行以下命令:

etcdctl  ls  /

etcdctl  member list

etcdctl cluster-health

etcdctl ls /atomic.io/network/subnets

etcdctl  rm   /atomic.io/network/   –recursive  #该命令是删除,慎用!当删除、新建key之后,需重启master和node节点的各相关服务。

etcdctl  mk  /atomic.io/network/config ‘{“Network”:”172.17.0.0/16″}’ #创建key,Network的网段可以自定义,但不能和本地网卡网段冲突。

etcdctl get /atomic.io/network/config





五、flanneld网络配置

在master和node节点上已经yum安装过flannel,只需修改配置即可:

grep -v ‘#’ /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://172.20.10.10:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"     #这是etcd的key




六、master和node重启flanneld: 

systemctl restart flanneld  ;ifconfig  会看到一个flannel0网卡

master端ping 本机flannel0网卡的ip和node机器的flannel0网卡的ip,能ping通说明网络打通。

node节点ping 本机flannel0网卡的ip和master机器的flannel0网卡的ip,能ping通说明网络打通。

!!!如果ping不通,执行以下命令:

master端:

systemctl restart flanneld

iptables -P FORWARD ACCEPT

node节点:

systemctl restart flanneld

systemctl restart docker

iptables -P FORWARD ACCEPT

再测试master和node之间的flannel0网卡的ip能够互ping即可。

至此,K8S平台已经搭建完成:

master端执行kubectl get nodes查看到节点redy即可。





七、Dashboard UI配置:

如下为配置kubernetes dashboard完整过程,在Node节点提前导入两个列表镜像:

pod-infrastructure.tgz

kubernetes-dashboard-amd64.tgz

【两个列表镜像获取地址:https://www.wzstyle.cn/315.html

docker load <pod-infrastructure.tgz,将导入的pod镜像名称修改,命令如下:

docker tag $(docker images|grep none|awk ‘{print $3}’) registry.access.redhat.com/rhel7/pod-infrastructure

docker load <kubernetes-dashboard-amd64.tgz,将导入的pod镜像名称修改,命令如下:

docker tag $(docker images|grep none|awk ‘{print $3}’) bestwu/kubernetes-dashboard-amd64:v1.6.3

然后在Master端,创建dashboard-controller.yaml文件,代码如下:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
        scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
    spec:
      containers:
      - name: kubernetes-dashboard
        image: bestwu/kubernetes-dashboard-amd64:v1.6.3
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        args:
          - --apiserver-host=http://172.20.10.8:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30

创建dashboard-service.yaml,代码如下:

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80
    targetPort: 9090

创建dashboard dashborad pods模块:

kubectl create -f dashboard-controller.yaml

kubectl create -f dashboard-service.yaml

创建完成后,查看Pods和Service的详细信息:

kubectl  get  namespace

kubectl get  deployment –all-namespaces

kubectl get  svc  –all-namespaces

kubectl  get  pods  –all-namespaces

kubectl get pod  -o wide  –all-namespaces

kubectl  describe  service/kubernetes-dashboard  –namespace=”kube-system”

kubectl  describe  pod/kubernetes-dashboard-530803917-816df –namespace=”kube-system”

kubectl  delete pod/kubernetes-dashboard-530803917-816df –namespace=”kube-system” –grace-period=0 –force

最后,浏览器访问172.20.10.8:8080/ui  即可看到页面:

K8S平台部署

原创文章,作者:wz,如若转载,请注明出处:https://www.wzstyle.cn/301.html

发表评论

邮箱地址不会被公开。 必填项已用*标注