docker k8s devops项目实战 (2)k8s集群搭建

核心组件

  • ETCD:分布式高性能键值数据库,存储整个集群的所有元数据
  • ApiServer:API服务器,集群资源访问控制入口,提供restAPI及安全访问控制
  • Scheduler:调度器,负责把业务容器调度到最合适的Node节点
  • Controller Manager:控制器管理,确保集群资源按照期望的方式运行
    Replication Controller
    Node controller
    ResourceQuota Controller
    Namespace Controller
    ServiceAccount Controller
    Tocken Controller
    Service Controller
    Endpoints Controller
  • kubelet:运行在每个节点上的节点代理
    pod管理:kubelet定期从所监听的数据源获取节点上pod/container的期望状态
    容器健康检查:kubelet创建了容器之后还要检查容器是否正常运行,如果容器运行出错,就要通过容器设置的重启策略进行处理
    容器监控:kubelet会监控所在节点的资源使用情况,并定时向master报告
  • kubectl:命令行接口,用于对kubernetes集群运行命令
  • CNI实现:通过网络接口,我们使用flannel来作为k8s集群的网络插件,实现跨节点通信

主要架构:
在这里插入图片描述
工作流程:
在这里插入图片描述

  1. 用户准备了一个资源文件(记录了业务应用的名称,镜像地址等信息),通过调用APIServer执行创建Pod
  2. APIserver收到用户的Pod创建请求后,将Pod信息写入到etcd中
  3. 调度器通过list-watch的方式,发现有新的pod数据,但是这个pod还没有绑定到某一个节点中
  4. 调度器通过调度算法,计算出最适合该pod运行的节点,并调用APIServer,把信息更新到etcd中
  5. kubelet同样通过list-watch方式,发现有新的pod调度到本机的节点了,因此调用容器运行时,去根据pod的描述信息,拉取镜像,启动容器,同时生成事件信息
  6. 同时,把容器的信息,事件及状态也通过APIServer写入到etcd中

搭建k8s集群,三台机器
172.16.10.189 master
172.16.10.185 slave1
172.16.10.184 slave1
先设置主机名:其他两台同理

hostnamectl set-hostname k8s-master

在这里插入图片描述
添加host解析

cat >> /etc/hosts<<EOF
172.16.10.189 k8s-master
172.16.10.185 k8s-slave1
172.16.10.184 k8s-slave1
EOF

设置yum源

scp -r docker-ce.repo root@172.16.10.189 /etc/yum.repos.d/
cat << EOF> /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
	http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF

安装kubelet组件,所有的master和slave都需要执行,kubelet kubectl kubeadm三个组件

yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes

查看kubeadm版本

kubeadm version

初始化配置文件
操作节点:只在master节点执行

kubeadm config print init-defaults > kubeadm.yaml
vim kubeadm.yaml

在这里插入图片描述
在这里插入图片描述

kubeadm config images list --config kubeadm.yaml

如果没有问题,将得到以下列表
在这里插入图片描述

#提前下载镜像到本地
kubeadm config images pull --config kubeadm.yaml

初始化master节点(只在master节点执行)

kubeadm init --config kubeadm.yaml

我初始化的时候报了
[ERROR DirAvailable–var-lib-etcd]: /var/lib/etcd is not empt
在这里插入图片描述
解决办法:直接删除这个目录就好
在这里插入图片描述提示我们按照上述提示信息报错,配置kubectl客户端的认证
在这里插入图片描述
之后使用提示命令,将两个slave节点加入到master中

kubeadm join 172.16.10.189:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:eecde65b9f9ecea275e9f03d0224e8ba4431d76c39fa3bd0a6ec101d3431329c

我添加节点时报以下错误,让我们关闭分区在这里插入图片描述
使用 swapoff -a 命令关闭,之后我们看到添加成功
在这里插入图片描述

kubectl get node #查看节点信息

我们会看到有三条节点信息,但是状态为NotReady,因为我们还没有装flannel插件
在这里插入图片描述
安装flannel插件
下载flannel的yaml文件

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp.flannel.unprivileged
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
    seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
    apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
    apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:
  privileged: false
  volumes:
    - configMap
    - secret
    - emptyDir
    - hostPath
  allowedHostPaths:
    - pathPrefix: "/etc/cni/net.d"
    - pathPrefix: "/etc/kube-flannel"
    - pathPrefix: "/run/flannel"
  readOnlyRootFilesystem: false
  # Users and groups
  runAsUser:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  # Privilege Escalation
  allowPrivilegeEscalation: false
  defaultAllowPrivilegeEscalation: false
  # Capabilities
  allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
  defaultAddCapabilities: []
  requiredDropCapabilities: []
  # Host namespaces
  hostPID: false
  hostIPC: false
  hostNetwork: true
  hostPorts:
  - min: 0
    max: 65535
  # SELinux
  seLinux:
    # SELinux is unused in CaaSP
    rule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: flannel
rules:
  - apiGroups: ['extensions']
    resources: ['podsecuritypolicies']
    verbs: ['use']
    resourceNames: ['psp.flannel.unprivileged']
  - apiGroups:
      - ""
    resources:
      - pods
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - nodes/status
    verbs:
      - patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-system
---
apiVersion: v1
kind
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值