1.前言

  以前搭建集群都是使用nginx反向代理,但现在我们有了更好的选择——K8S。我不打算一上来就讲K8S的知识点,因为知识点还是比较多,我打算先从搭建K8S集群讲起,我也是在搭建集群的过程中熟悉了K8S的一些概念,希望对大家有所帮助。K8S集群的搭建难度适中,网上有很多搭建k8s的教程,我搭建的过程中或多或少遇到一些问题,现在就把我总结完的教程给大家总结一下。这里主要讲通过二进制包安装K8S

2.集群组件介绍

节点 ip 组件
master 192.168.8.201

etcd:存储集群节点信息

kubectl:管理集群组件,通过kubectl控制集群

kube-controller-manage:监控节点是否健康,不健康则自动修复至健康状态

kube-scheduler:负责为kube-controller-manage创建的pod选择合适的节点,将节点信息写入etcd

node 192.168.8.202

kube-proxy:service与pod通信

kubelet:kube-scheduler将节点数据存入etcd后,kubelet获取到并按规则创建pod

docker

3.etcd安装

  1. yum install etcd y
  2. vi /etc/etcd/etcd.conf

修改etcd.conf内容

  1. ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

启动

  1. systemctl start etcd
  2. systemctl enable etcd

4.下载k8s安装包

打开github中k8s地址,选择一个版本的安装包

点击CHANGELOG-1.13.md,在master节点上安装server包,node节点上安装node包

5.master节点安装server

  1. tar zxvf kubernetes-server-linux-amd64.tar.gz      #解压
  2. mkdir -p /opt/kubernetes/{bin,cfg}            #创建文件夹
  3. mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin    #移动文件到上一步的文件夹
    chmod +x /opt/kubernetes/bin/*
5.1配置apiserver
  1. cat <<EOF >/opt/kubernetes/cfg/kube-apiserver
  2.  
  3. KUBE_APISERVER_OPTS="--logtostderr=true \\
  4. --v= \\
  5. --etcd-servers=http://192.168.8.201:2379 \\
  6. --insecure-bind-address=0.0.0.0 \\
  7. --insecure-port= \\
  8. --advertise-address=192.168.8.201 \\
  9. --allow-privileged=true \\
  10. --service-cluster-ip-range=10.10.10.0/ \\
  11. --service-node-port-range=- \\
  12. --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ResourceQuota"
  13.  
  14. EOF
  1. cat <<EOF >/usr/lib/systemd/system/kube-apiserver.service
  2. [Unit]
  3. Description=Kubernetes API Server
  4. Documentation=https://github.com/kubernetes/kubernetes
  5.  
  6. [Service]
  7. EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
  8. ExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTS
  9. Restart=on-failure
  10.  
  11. [Install]
  12. WantedBy=multi-user.target
  13. EOF
5.2配置kube-controller-manager
  1. cat <<EOF >/opt/kubernetes/cfg/kube-controller-manager
  2.  
  3. KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=true \\
  4. --v= \\
  5. --master=127.0.0.1: \\
  6. --leader-elect=true \\
  7. --address=127.0.0.1"
  8.  
  9. EOF
  1. cat <<EOF >/usr/lib/systemd/system/kube-controller-manager.service
  2. [Unit]
  3. Description=Kubernetes Controller Manager
  4. Documentation=https://github.com/kubernetes/kubernetes
  5.  
  6. [Service]
  7. EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
  8. ExecStart=/opt/kubernetes/bin/kube-controller-manager \$KUBE_CONTROLLER_MANAGER_OPTS
  9. Restart=on-failure
  10.  
  11. [Install]
  12. WantedBy=multi-user.target
  13. EOF
5.3配置kube-scheduler
  1. cat <<EOF >/opt/kubernetes/cfg/kube-scheduler
  2.  
  3. KUBE_SCHEDULER_OPTS="--logtostderr=true \\
  4. --v= \\
  5. --master=127.0.0.1: \\
  6. --leader-elect"
  7.  
  8. EOF
  1. cat <<EOF >/usr/lib/systemd/system/kube-scheduler.service
  2. [Unit]
  3. Description=Kubernetes Scheduler
  4. Documentation=https://github.com/kubernetes/kubernetes
  5.  
  6. [Service]
  7. EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
  8. ExecStart=/opt/kubernetes/bin/kube-scheduler \$KUBE_SCHEDULER_OPTS
  9. Restart=on-failure
  10.  
  11. [Install]
  12. WantedBy=multi-user.target
  13. EOF
5.4运行kube-api与kube-controller-manager与kube-scheduler
  1. vim ku.sh #创建一个脚本,内容如下
  1. #!/bin/bash
  2.  
  3. systemctl daemon-reload
  4. systemctl enable kube-apiserver
  5. systemctl restart kube-apiserver
  6.  
  7. systemctl enable kube-controller-manager
  8. systemctl restart kube-controller-manager
  9.  
  10. systemctl enable kube-scheduler
  11. systemctl restart kube-scheduler

执行以上脚本

  1. chmod +x *.sh    #给权限
  2.  
  3. ./ku.sh    #运行
5.5将kubectl配置到环境变量,便于执行
  1. echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
  2. source /etc/profile

至此server安装成功,可通过命令查看相关进程是否启动成功

  1. ps -ef |grep kube

启动失败可通过以下命令查看信息

  1. journalctl -u kube-apiserver

6.安装node节点

6.1docker安装
  1. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. sudo yum makecache fast
  4. sudo yum -y install docker-ce
  5. sudo systemctl start docker
6.2解压node.zip包
  1. tar zxvf kubernetes-node-linux-amd64.tar.gz
  2.  
  3. mkdir -/opt/kubernetes/{bin,cfg}
  4.  
  5. mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/

 chmod +x /opt/kubernetes/bin/*

6.3创建配置文件
  1. vim /opt/kubernetes/cfg/kubelet.kubeconfig
  1. apiVersion: v1
  2. kind: Config
  3. clusters:
  4. - cluster:
  5. server: http://192.168.8.201:8080
  6. name: kubernetes
  7. contexts:
  8. - context:
  9. cluster: kubernetes
  10. name: default-context
  11. current-context: default-context
  1. vim /opt/kubernetes/cfg/kube-proxy.kubeconfig
  1. apiVersion: v1
  2. kind: Config
  3. clusters:
  4. - cluster:
  5. server: http://192.168.8.201:8080
  6. name: kubernetes
  7. contexts:
  8. - context:
  9. cluster: kubernetes
  10. name: default-context
  11. current-context: default-context
  1. cat <<EOF >/opt/kubernetes/cfg/kubelet
  2.  
  3. KUBELET_OPTS="--logtostderr=true \\
  4. --v= \\
  5. --address=192.168.8.202 \\
  6. --hostname-override=192.168.8.202 \\
  7. --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \\
  8. --allow-privileged=true \\
  9. --cluster-dns=10.10.10.2 \\
  10. --cluster-domain=cluster.local \\
  11. --fail-swap-on=false \\
  12. --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
  13.  
  14. EOF
  1. cat <<EOF >/usr/lib/systemd/system/kubelet.service
  2. [Unit]
  3. Description=Kubernetes Kubelet
  4. After=docker.service
  5. Requires=docker.service
  6.  
  7. [Service]
  8. EnvironmentFile=-/opt/kubernetes/cfg/kubelet
  9. ExecStart=/opt/kubernetes/bin/kubelet \$KUBELET_OPTS
  10. Restart=on-failure
  11. KillMode=process
  12.  
  13. [Install]
  14. WantedBy=multi-user.target
  15. EOF
  1. cat <<EOF >/opt/kubernetes/cfg/kube-proxy
  2.  
  3. KUBE_PROXY_OPTS="--logtostderr=true \
  4. --v= \
  5. --hostname-override=192.168.8.202 \
  6. --kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"
  7.  
  8. EOF
  1. cat <<EOF >/usr/lib/systemd/system/kube-proxy.service
  2. [Unit]
  3. Description=Kubernetes Proxy
  4. After=network.target
  5.  
  6. [Service]
  7. EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
  8. ExecStart=/opt/kubernetes/bin/kube-proxy \$KUBE_PROXY_OPTS
  9. Restart=on-failure
  10.  
  11. [Install]
  12. WantedBy=multi-user.target
  13. EOF
6.4启动kube-proxy与kubelet
  1. vim ku.sh
  1. #!/bin/bash
  2.  
  3. systemctl daemon-reload
  4. systemctl enable kubelet
  5. systemctl restart kubelet
  6.  
  7. systemctl enable kube-proxy
  8. systemctl restart kube-proxy

至此node安装完成,查看是否安装成功

失败则查看日志

  1. journalctl -u kubelet

7.master节点验证是否有node节点

查看集群健康状态

至此master与node安装成功

8.启动一个nginx示例

  1. kubectl run nginx --image=nginx --replicas=
  2. kubectl expose deployment nginx --port= --target-port= --type=NodePort

验证

浏览器访问

9.安装dashbord

vim kube.yaml

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. labels:
  5. app: kubernetes-dashboard
  6. name: kubernetes-dashboard
  7. namespace: kube-system
  8. spec:
  9. replicas:
  10. selector:
  11. matchLabels:
  12. app: kubernetes-dashboard
  13. template:
  14. metadata:
  15. labels:
  16. app: kubernetes-dashboard
  17. annotations:
  18. scheduler.alpha.kubernetes.io/tolerations: |
  19. [
  20. {
  21. "key": "dedicated",
  22. "operator": "Equal",
  23. "value": "master",
  24. "effect": "NoSchedule"
  25. }
  26. ]
  27. spec:
  28. containers:
  29. - name: kubernetes-dashboard
  30. image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.7.0
  31. imagePullPolicy: Always
  32. ports:
  33. - containerPort:
  34. protocol: TCP
  35. args:
  36. - --apiserver-host=http://192.168.8.201:8080
  37. livenessProbe:
  38. httpGet:
  39. path: /
  40. port:
  41. initialDelaySeconds:
  42. timeoutSeconds:
  43.  
  44. ---
  45.  
  46. kind: Service
  47. apiVersion: v1
  48. metadata:
  49. labels:
  50. app: kubernetes-dashboard
  51. name: kubernetes-dashboard
  52. namespace: kube-system
  53. spec:
  54. type: NodePort
  55. ports:
  56. - port:
  57. targetPort:
  58. selector:
  59. app: kubernetes-dashboard

创建

  1. kubectl create -f kube.yaml

查看pod

查看端口

访问bord

 至此集群搭建完成

.net core i上 K8S(一)集群搭建的更多相关文章

  1. K8S之集群搭建

    转自声明 ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建 1.K8S环境搭建的几种方式 搭建K8S环境有几种常见的方式如下: (1)Minikube Minikube是一 ...

  2. 初试 Centos7 上 Ceph 存储集群搭建

    转载自:https://cloud.tencent.com/developer/article/1010539 1.Ceph 介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统 ...

  3. K8s 上的分布式存储集群搭建(Rook/ceph)

    转载自:https://mp.weixin.qq.com/s/CdLioTzU4oWI688lqYKXUQ 1 环境准备 1.1 基础环境 3台配置一致的虚拟机 虚拟机配置:4c 8g 虚拟机操作系统 ...

  4. k8s docker集群搭建

    一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器 ...

  5. Kubernetes(k8s) docker集群搭建

    原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背 ...

  6. 使用国内的镜像源搭建 kubernetes(k8s)集群

    1. 概述 老话说的好:努力学习,提高自己,让自己知道的比别人多,了解的别人多. 言归正传,之前我们聊了 Docker,随着业务的不断扩大,Docker 容器不断增多,物理机也不断增多,此时我们会发现 ...

  7. 2-20 MySQL集群搭建实现高可用

    MySQL集群概述和安装环境 MySQL Cluster是MySQL适合于分布式计算环境的高实用.高冗余版本.Cluster的汉语是"集群"的意思.它采用了NDB Cluster ...

  8. 前端静态站点在阿里云自建 K8S DevOps 集群上优雅的进行 CI/CD

    目录 网站 域名 K8S DevOps 集群 私有 Gitlab 使用 Docker 编译站点 * Dockerfile * 构建编译 Image * 测试编译 Image * 推送镜像到 Aliyu ...

  9. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s

    前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...

随机推荐

  1. 团队作业4Alpha冲刺

    仓库地址:https://gitee.com/ILoveFunGame/game_strategy_network.git 第一天 2018/6/13 1.1 今日完成任务情况以及遇到的问题. 1.1 ...

  2. Unity Pitfall 汇总

    [Unity Pitfall 汇总] 1. 当脚本被绑定到一个对象时,一个类对象即会被创建,此意味着此类构造函数会被调用.所以在构造函数中不要调用任何运行时才创建的类.相应的初始化方代码应该移至Sta ...

  3. C#使用NPOI导出excel设置单元格背景颜色

    ICellStyle cellStyle = workbook.CreateCellStyle(); cellStyle.FillPattern = FillPattern.SolidForegrou ...

  4. $(window).load()和$(document).ready()

    一.前言 我们在编写前端代码的js文件时,往往是会先写一个$(function(){}),然后才会在大括号里面继续写我们自己的代码.当时并不能理解为什么要添加这样一个东西,只是把它当做一个标签一样添加 ...

  5. 快速上手Runtime(三)之方法交换

    开发过程中,我们经常会用到系统类,而它提供的方法又不能完全满足我们开发的需要,那么在此时,我们需要为系统自带的方法扩展一些功能,而且还要保证原有的功能可正常使用.假设咱们现在有这么一个需求,我们在调用 ...

  6. 深入浅出iptables

    一. 防火墙是什么 1. 防火墙简述 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性.它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可 ...

  7. VM 监控信息布局

    <div ng-show="showVmChart"> <div class="row"> <div class="co ...

  8. 19-字符切割函数c++模板

    https://www.cnblogs.com/stonebloom-yu/p/6542756.html #include <cstring> #include <cstdio> ...

  9. JAVA 上加密算法的实现用例,MessageDigest介绍

    第 1 章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快 ...

  10. Python的内建比较函数cmp比较原理剖析-乾颐堂

    cmp( x, y):比较2个对象,前者小于后者返回-1,相等则返回0,大于后者返回1. Python的cmp比较函数比较原理 Python的cmp函数可以比较同类型之间,或者不同数据类型之间.然后根 ...