• Home
  • About
    • VeinFu的技术博客 photo

      VeinFu的技术博客

      目前从事云计算相关的工作,主要针对私有云场景的开发,专注Openstack订制化功能的开发及实施,欢迎广大程序爱好者一起沟通共同进步。

    • Learn More
    • Email
    • Github
  • 所有文章
  • 归档
  • 技术博客
  • 生活记录

k8s集群部署之初体验

15 Jul 2019

Reading time ~1 minute

本文总阅读量: 次

  • 1. 概念
    • 1.1 什么是k8s
    • 1.2 k8s架构
    • 1.3 k8s核心组件
      • master
      • node
      • Deployment
      • Replication Controller
      • ReplicaSets
      • pod
      • service
      • namespace
  • 2. 搭建k8s集群环境
    • 2.1 安装docker
    • 2.2 安装k8s基础组件
    • 2.3 创建k8s初始集群环境
      • 2.3.1 下载k8s组件
      • 2.3.2 初始化集群环境

1. 概念

k8s作为时下最火的容器编排引擎,我们非常有必要花时间去学习、研究并且掌握它。

1.1 什么是k8s

k8s全称Kubernetes,k8s是 Google 团队发起的一个开源项目,它的目标是管理跨多个主机的容器,用于自动部署、扩展和管理容器化的应用程序,主要实现语言为 Go 语言。

1.2 k8s架构

如下图所示是k8s的整体架构图(该图片摘自网络):

  • k8s架构图

1.3 k8s核心组件

从上述k8s的架构图来看,一个k8s集群物理上是由一个master节点和若干个(一般至少为2个)工作节点组成,而对应不同的节点会因为角色功能的不同都会有各自的核心组件。

master

k8s的主控节点,负责管理集群和协调集群中的所有活动,其核心组件至少包括如下几种:

  • apiserver: 对内/外提供 HTTP REST资源操作接口;
  • controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler:资源的调度策略,将不同的pod调度到不同的工作节点上执行;
  • etcd:保存整个集群的状态信息,其实质是个数据库;

node

k8s的工作节点,完成最终pod中容器的程序的运行和业务的处理,其核心组件主要包括:

  • kubelet:负责 Pod 的创建、启动、监控、重启、销毁等工作,同时与 Master 节点协作,实现集群管理的基本功能;
  • kube-proxy:实现 Kubernetes Service 的通信和负载均衡;

Deployment

Replication Controller

ReplicaSets

pod

k8s资源调度的最小单位,它是由紧密联系、资源共享的一组容器在组成,可以理解成一个具体应用的实例。

service

提供访问策略,资源的访问入口。

namespace

为k8s集群提供虚拟的隔离作用,一般地至少会存在两个命名空间:default、kube-system,实际使用中我们可以根据需求自建namespace。

2. 搭建k8s集群环境

了解了k8s的基本概念之后,进一步理解k8s最快的方式就是亲自搭建一个k8s集群,此处只有一个节点(也就是同时扮演master和node的角色)。

2.1 安装docker

docker的安装此处不再赘述,可参照我的另一篇博文:https://www.jianshu.com/p/911dba395ef3

2.2 安装k8s基础组件

这里我是通过kubeadm来搭建k8s集群,所以需要首先同时安装kubeadm、kubectl、kubelet,安装的过程其实跟docker类似,可参考如下:

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
echo 'deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main' > /etc/apt/sources.list.d/k8s.list
apt-get update && apt-get install -y kubeadm kubectl kubelet

2.3 创建k8s初始集群环境

2.3.1 下载k8s组件

搭建k8s集群所需的组件基本上都放在google网站上,需要科学上网,如果网络搞不定,可以先从docker hub下载这些组件然后修改tag,首先可通过下图命令来查看需要安装的k8s组件:

  • kubeadm config images list

接着,写一个下载所需docker image和修改tag的shell脚本:

  • cat pull_and_tag_k8s_images.sh 然后执行sh pull_and_tag_k8s_images.sh完成k8s组件镜像的下载和标签的修改。

2.3.2 初始化集群环境

首先执行swapoff -a来关闭,然后执行如下命令构建k8s初始化环境:

kubeadm init --pod-network-cidr=10.244.0.0/16

根据输出的提示安装kubectl的配置文件:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

安装pod网络是pod间能够通信:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

出于安全考虑,默认master不允许参与pod调度因为,现在只有一个节点,为了能够让pod调度到master,需要执行:

kubectl taint node vienfu-virtualbox node-role.kubernetes.io/master-
# 如果新添加了node,需要重新恢复master only状态,执行如下命令
kubectl taint node vienfu-virtualbox node-role.kubernetes.io/master=""
#上述命令中的vienfu-virtualbox是master的主机名

自此,单节点的k8s集群环境算是部署完成了,可通过kubectl get nodes -o wide命令查看:

  • kubectl get nodes -o wide


k8s运维实施 Share Tweet +1