k8s简介

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制

k8s的资源对象

master

kubernetes里的master指的是集群控制节点,在每个kubernetes集群里都需要有一个master来负责真个集群的管理和控制,在master上运行着以下关键进程:

  • API Server(kube-apiserver):提供了HTTP Rest接口的关键服务进程,是kubernetes里所有资源的增删改查等操作的唯一入口,也是集群中的入口进程
  • Controller Manager(kube-controller-manager):kubernetes里所有资源对象的自动化控制中心,可以理解成为资源对象的“大总管”
  • Scheduler:(kube-scheduler):负责资源调度(pod调度)的进程,相当于公交公司的“调度室”
  • Etcd:所有资源对象的数据被会被保存到etcd中,持久化

node

除了master,kubernetes集群中其他机器被称之为 Node,node可以是一台物理机,也可以是一台虚拟机,node是kubernetes集群中的工作负载节点,每个node都会被master分配一些工作负载(docker容器),当某个node宕机时,其他节点会接管故障节点的资源,node节点当中的重要进程:

  • kubelet:负责pod对应容器的创建,启停等任务,另外kubelet与master紧密协作,随时报告给master自身的情况,如CPU,内存,操作系统,docker版本等
  • kube-proxy:实现kubernetes server的通信与负载均衡机制的重要组件
  • docker engine:docker引擎,负责本主机的容器创建 和管理工作

pod

pod是kubernetes最重要的基本概念,是kubernetes调度的最小单元,每个container都有一个pause容器,称之为根容器,属于kubernetes平台的一部分,一个pod可以运行多个容器(container),但是一般来说我们一个pod只运行一个container,如下图:

k8s集群架构图

集群的搭建(master)

简单了解k8s的资源对象之后咱们就先来搭建一个k8s集群,因为我们的后续操作都是建立在k8s集群当中的,因此,我们就需要先搭建一个k8s集群,这样也便于大家的理解

环境准备

三台机器:

  • master:192.168.254.13
  • node1:192.168.254.12
  • node2:192.168.254.10
  • 基于主机名通信:/etc/hosts;
  • 时间同步
  • 关闭firewalld,selinux 

规划如下:

第一步:确保master和node中开启内核参数

  1. echo > /proc/sys/net/bridge/bridge-nf-call-iptables
  2. note:如果提示没有bridge-nf-call-iptables
  3. 解决办法:
  4. [root@localhost ~]# modprobe br_netfilter

第二步:配置docker  yum源和kubenetes  yum源并且安装

  1. #安装kubernetes的yum源
    vim /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name = kubernetes
  4. baseurl = https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. enabled =
  6. gpgcheck =
  7. gpgkey = https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  8. #安装docker的yum源
  9. cd /etc/yum.repos.d/
  10. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  11. yum install kubelet kubeadm kubectl docker-ce -y

第三步:添加初始化额外参数,忽略swap报警信息

  1. [root@localhost ~]# vim /etc/sysconfig/kubelet
  2. KUBELET_EXTRA_ARGS="--fail-swap-on=false"
  3. [root@localhost ~]# service docker restart

第四步:初始化集群

  1. [root@localhost ~]# kubeadm init --kubernetes-version=v1.15.2 --service-cidr=10.96.0.0/ --pod-network-cidr=10.244.0.0/ --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU --image-repository registry.aliyuncs.com/google_containers
  2. 解释:
  3. --apiserver-advertise-address:指定用 Master 的哪个IP地址与 Cluster的其他节点通信。
  4. --service-cidr:指定Service网络的范围,即负载均衡VIP使用的IP地址段。
  5. --pod-network-cidr:指定Pod网络的范围,即PodIP地址段。
  6. --image-repositoryKubenetes默认Registries地址是 k8s.gcr.io,在国内并不能访问 gcr.io,在1.13版本中我们可以增加-image-repository参数,默认值是 k8s.gcr.io,将其指定为阿里云镜像地址:registry.aliyuncs.com/google_containers
  7. --kubernetes-version=v1.13.3:指定要安装的版本号。
  8. --ignore-preflight-errors=:忽略运行时的错误,例如上面目前存在[ERROR NumCPU]和[ERROR Swap],忽略这两个报错就是增加--ignore-preflight-errors=NumCPU 和--ignore-preflight-errors=Swap的配置即可。

第五步:记录以下内容,因为后期我们的node节点需要通过ca认证加入到集群当中

  1. kubeadm join 192.168.254.13: --token 71ovlq.w7pf14czrwi7f1ag --discovery-token-ca-cert-hash sha256:d2a9a1aa23fdbcd42711a222c959026073cf0a70f37a87806233d8319c66feb4

第六步:按照提示完成以下三步

  1. [root@localhost ~]# mkdir -p $HOME/.kube
  2. [root@localhost ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. [root@localhost ~]# chown $(id -u):$(id -g) $HOME/.kube/config

第七步:查看节点状态

这里的NotReady是因为咱们还没有部署网络

  1. [root@localhost ~]# kubectl get node
  2. NAME STATUS ROLES AGE VERSION
  3. localhost.localdomain NotReady master 8h v1.15.2

第八步:查看组件状态

  1. [root@localhost ~]# kubectl get cs
  2. NAME STATUS MESSAGE ERROR
  3. controller-manager Healthy ok
  4. scheduler Healthy ok
  5. etcd- Healthy {"health":"true"}

第九步:部署flannel网络(github)

  1. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  2.  
  3. 若下载失败可以从阿里云上pull
  4. [root@master1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64
  5. [root@master1 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
  6. [root@master1 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64

集群的搭建(2个node节点)

对于2个node节点的配置跟master节点的1,2,3步一样,这里就不在写了,直接跳到第四步

第四步:节点加入集群,也就是部署master时候的第五步

  1. [root@localhost ~]#kubeadm join 192.168.254.13: --token wug9gq.m9j7hhmvvy9ag8kk --discovery-token-ca-cert-hash sha256:6f8a056391bf04c3911465c581e78376e1d35eb309641105ddd69ce5eb47c591 --ignore-preflight-errors=Swap

第五步:在master节点上用一下命令查看,以下状态是代表ok

  1. [root@master ~]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. master Ready master 10h v1.15.3
  4. node1 Ready <none> 10h v1.15.3
  5. node2 Ready <none> 10h v1.15.3

补充

  1. .如果发现以上错误说明master节点token失效,需要在master上重新生成
  2. [root@localhost ~]# kubeadm token create --print-join-command
  3.  
  4. .如果node机器曾经加入过集群,要重新加入需要kubeadm reset重置,然后在join
  5. [root@localhost ~]# kubeadm reset
  6.  
  7. .如果忘掉token
  8. [root@master ~]# kubeadm token list
  9. .如果忘掉hash
  10. [root@master]openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der >/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

kubectl命令

kubectl命令是用来在k8s集群当中进行增删改查pod的重要命令,它的常用命令如下:

  1. kubectl get nodes    #获取节点信息
  2. kubectl get pods -n kube-system #获取kube-system名称空间内的信息
  3. kubectl get pods -n kube-system -o wide #获取kube-system名称空间的详细信息
  4. kubectl get cs #获取component组件的状态
  5. kubectl get ns #获取所有名称空间的状态
  6. kubectl describe node NODENAME #查看节点的详细信息
  7. kubectl cluster-info #集群信息
  8. kubectl delete pod httpd1 #删除所创建的pod
  9. kubectl apply #针对于清单文件创建pod,也可以用这个命令进行更新,他会检查etcd中的数据,把不同地方同步
  10. kubectl patch #打补丁,比如replacas从1修改成5
  11. kubectl rollout undo #回滚
  12. kubectl expose #创建一个service
  13. kubectl scale #扩容或者缩容
  14. kubectl edit #编辑pod或者service清单文件

例子:

  1. 1.启动pod,跑nginx服务(在这里的80端口只能被各个pod所访问,集群外的机器无法访问,因为如果pod死掉会重新起一个新pod,但是ip会改变,因此我们在访问服务时不能以podip为准,因此,需要serviceip
  2. [root@master ~]#kubectl run nginx-deployment --image=nginx:1.14-alpine --port= --replicas=
  3. 2.获取pod名称信息,然后映射给service
  4. [root@master ~]# kubectl get pods
  5. NAME READY STATUS RESTARTS AGE
  6. nginx-deployment-675947b94d-vwcnj / Running 145m
  7. nginx1-7f4f664fbf-c54z6 / Running 145m
  8. 3.查看一个pod的标签,在用describe svc SERVICE去查看标签选择器是否一致
  9. [root@master ~]# kubectl get pods --show-labels;
  10. NAME READY STATUS RESTARTS AGE LABELS
  11. nginx-6db489d4b7-bk4sr / Running 71m pod-template-hash=6db489d4b7,run=nginx
  12. nginx-6db489d4b7-gmwsg / Running 74m pod-template-hash=6db489d4b7,run=nginx
  13. 4.暴露端口80端口集群网络
  14. [root@master ~]# kubectl expose deployment nginx-deployment --name=nginx --port= --target-port= --protocol=TCP
  15. service/nginx exposed
  16. 解释:
  17. --name 创建的服务名称
  18. --port service端口
  19. --target-port pod端口
  20. --protocol 协议
  21. deployment 后面跟创建pod的名字
  22. 5.查看服务ip,刚才的nginx服务ip就位10.99.108.(这里的ip,也是只能在集群内部各节点中访问,集群外无法访问)
  23. [root@master ~]# kubectl get svc
  24. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  25. kubernetes ClusterIP 10.96.0.1 <none> /TCP 15h
  26. nginx ClusterIP 10.99.108.60 <none> /TCP 7m1s
  27. 6.进入到容器交互界面
  28. kubectl exec -it nginx-56b8c64cb4-t97vb -- /bin/bash #假如当前pod只有一个容器,运行以下命令即可
  29. 7.增加原有服务pod数量(动态扩容和缩容)
  30. kubectl scale --replicas= deployment nginx
  31. 8.滚动更新
  32. kubectl set image deployment nginx nginx=nginx:1.14-alpine
  33. 查看滚动更新状态
  34. kubectl rollout status deployment nginx
  35. 如果更新完成之后发现有问题我们还可以做回滚操作
  36. kubectl rollout undo deployment nginx
  37. 9.如果想要让集群以外的客户端访问,需要修改podservice
  38. kubectl edit svc nginx
  39. type: ClusterIP替换成type:NodePort即可

k8s集群搭建(一)的更多相关文章

  1. K8S集群搭建

    K8S集群搭建 摘要 是借鉴网上的几篇文章加上自己的理解整理得到的结果,去掉了一些文章中比较冗余的组件和操作,力争做到部署简单化. K8S组件说明 Kubernetes包含两种节点角色:master节 ...

  2. k8s集群搭建(三)

    Dashboard安装 Kubernetes Dashboard是k8s提供基于Web的监控和操作界面,可以通过UI来显示集群的所有工作负载,除了查看资源,还是创建.编辑.更新.删除资源. 根据Kub ...

  3. k8s集群搭建 2019

    参考,https://github.com/qxl1231/2019-k8s-centos 事实上k8s集群的搭建很简单,笔者在搭建的过程中遇到的主要问题是镜像无法下载的问题. 如果发现教程中提供的镜 ...

  4. K8S集群搭建——基于CentOS 7系统

    环境准备集群数量此次使用3台CentOS 7系列机器,分别为7.3,7.4,7.5 节点名称 节点IPmaster 192.168.0.100node1 192.168.0.101node2 192. ...

  5. 高可用k8s集群搭建

    虚拟机选择 Win10 Hyper-V 总体架构 三个master,三个node master的组件 etcd kube-apiserver kube-controller-manager kube- ...

  6. k8s集群搭建过程详解

    准备工作 安装CentOS7虚拟机 略 安装Docker 略 关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewall ...

  7. Kubernetes 系列(一):本地k8s集群搭建

    我们需要做以下工作: (1)安装VMware,运行CentOs系统,一个做master,一个做node. (2)安装K8s. (3)安装docker和部分镜像会需要访问外网,所以你需要做些网络方面的准 ...

  8. k8s集群搭建笔记(细节有解释哦)

    本文中所有带引号的命令,请手动输入引号,不知道为什么博客里输入引号,总是自动转换成了中文 基本组成 pod:k8s 最小单位,类似docker的容器(也许) 资源清单:资源.资源清单语法.pod生命周 ...

  9. k8s集群搭建EFK日志平台:ElasticSearch + Fluentd + Kibana

    k8s集群 kubectl get node EFK简介 ElasticSearch:分布式存储检索引擎,用来搜索.存储日志 Fluentd:日志采集 Kibana:读取es中数据进行可视化web界面 ...

随机推荐

  1. js 加载并解析Markdown文档

    网上有很多网站会通过.md文档来做页面内容(比如,阮一峰老师的es6入门blog: http://es6.ruanyifeng.com/),很好奇,这是怎么做的?(至于.md是什么,或许(https: ...

  2. 遵循PEP8风格

    遵循PEP8风格 在编写python代码的时候我们应该采用统一的风格来编写代码,可以使代码更加容易读懂.采用和其他程序员统一的编码风格来写代码,也可以使项目更利于多人协作开发.即便代码只有你自己能看懂 ...

  3. 41 修改树莓派交换分区 SWAP 的大小

    http://blog.lxx1.com/3289 SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交 ...

  4. CF1175D Array Splitting

    题目链接 题意 给出一个长度为\(n\)的序列\(a\),要求分为恰好\(K\)段.第\(i\)个点的贡献是\(a_i \times f(i)\),\(f(x)\)表示x所属的是第几段. 思路 非常巧 ...

  5. echarts的markline的使用 y轴预警线

    代码示例: app.title = '坐标轴刻度与标签对齐'; option = { color: ['#3398DB'], tooltip : { trigger: 'axis', axisPoin ...

  6. Spring FrameWork体系结构及模块间依赖关系

    详见:https://www.cnblogs.com/ywlaker/p/6136625.html 几个图: (Spring3) (Spring4) 由于Spring体系结构庞大且复杂,为了简化开发者 ...

  7. [LeetCode] 380. Insert Delete GetRandom O(1) 常数时间内插入删除和获得随机数

    Design a data structure that supports all following operations in average O(1) time. insert(val): In ...

  8. [LeetCode] 343. Integer Break 整数拆分

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  9. Linux挖矿程序kworkerds分析

    0×00 背景概述 近日,同伴的一台Linux服务器中了kworkerds挖矿程序,随即对挖矿程序进行了处理与分析. 0×01服务器现状 进入服务器之后通过top命令,没有发现有占用CPU资源过高的进 ...

  10. FWT-快速沃尔什变换

    FWT-快速沃尔什变换 FWT有啥用啊 我们知道,FFT可以解决多项式的卷积,即 \[ C_k=\sum_{i+j=k}A_i*B_j \] 如果将操作符换一下,换成集合运算符 比如 \[ C_k=\ ...