Kubernetes是什么?

Kubernetes,又称为k8s(首字母为k、首字母与尾字母之间有8个字符、尾字母为s,所以简称k8s)或者简称为“kube”,是一种可自动实施Linux容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行Linux容器的多组主机聚集在一起,由kubernetes帮助您轻松高效地管理这些集群。而且这些集群可跨公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助Apache Kafka进行的实时数据流),kubernetes是理想的托管平台。

Kubernetes最初由Google的工程师开发和设计。Google是最早研发Linux容器技术的企业之一(组建了cgroups),曾公开分享介绍Google如何将一切都运行于容器之中(这是Google云服务背后的技术)。Google每周会启用超过20亿个容器——全都由内部平台Borg支撑。Borg是Kubernetes的前身,多年来开发Borg的经验教训成了影响Kubenetes中许多技术的主要因素。

虚拟化架构
虚拟化架构

kubenetes架构
在这里插入图片描述
概念介绍

  • kubectl:客户端命令行工具,将接收命令格式化后发送给kube-apiserver,作为整个系统的操作入口。
  • kube-apiserver:作为整个系统的控制入口,以REST API服务提供接口。
  • kube-controller-manager:用来执行整个系统中的后台任务,包括节点状况、pod个数、pod和service的关联等。
  • kube-scheduler:负责节点资源管理,接受来自kube-apiserver创建pod任务,并分配到某节点。
  • etcd:负责节点之间的服务发现和配置共享。
  • kubeproxy:运行在每个计算节点上,负责pod网络代理。定时从etcd获取到service信息来做相应的策略。
  • kubelet:运行在每个己算节点上,作为agent,接受分配该节点的pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。

安装kubernetes环境 --实验拓扑图
在这里插入图片描述

使用kubeadm部署k8s集群

准备工作:
关闭防火墙

firewall-cmd --set-default-zone=trusted

关闭selinux

setenforce 0

编辑/etc/selinux/config文件 将 设置 SELINUX=permissive 
或 SELINUX=disabled

设置hosts

cat <<EOF >> /etc/hosts
192.168.26.31   vms31.cka.cc    vms31
192.168.26.32   vms32.cka.cc    vms32
192.168.26.33   vms33.cka.cc    vms33
EOF

关闭swap

swapoff -a
sed -i 's/^[^#].*swap/#&/' /etc/fstab

配置YUM

cd /etc/yum.repos.d/
rm -rf *      # 在删除这些repo文件之前,首先要把wget装上
wget ftp://ftp.rhce.cc/k8s/*

安装docker

yum install docker -y
systemctl start docker; systemctl enable docker    # 开启docker服务并设置开机启动

设置相关属性

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridfe-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

sysctl -p

安装kubernetes相关软件包(实验使用的版本是1.15.3,当前最新版1.18.3)

yum install -y kubelet-1.15.3-0 kubeadm-1.15.3-0 kubectl-1.15.3-0 --disableexcludes=kubernetes
# 不指定版本则安装的是最新版本
systemctl start kubelet; systemctl enable kubelet    # 启动kubelet服务并设置开机启动

以上设置每台机器都要做

部署kubernetes

仅在master上执行

kubeadm init --kubernetes-version=v1.15.3 --image-repository-registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

# --kubernetes-version=v1.15.3 指定版本号
# --image-repository registry.aliyuncs.com/google_containers 指定下载镜像的仓库
# --pod-network-cidr=10.244.0.0/16 指定pod网络的网段

安装完成后需要运行以下命令(安装完成后会有提示)

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

master配置完成


node加入集群(master安装完成后会有提示)

kubeadm join 192.168.26.31:6443 --token e5bfyw.cv935y1sto382rta     --discovery-token-ca-cert-hash sha256:8313d9617eaa56a41f2b885961f6135aae4070b163bb4e7177031721e7624976

如果配置错了怎么办?
重新部署环境

kubeadm reset

加入集群的命令找不到了怎么办?
获取加入集群的命令

kubeadm token create --print-join-command

此时,在master上执行kubectl get nodes可以看到所以节点

但是状态都是NotRead,还需要安装网络插件

安装pod网络插件

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

稍等片刻再执行kubectl get nodes,可以看到所有的节点都已经Ready了
在这里插入图片描述
至此kubernetes集群环境安装完毕。

补充:

设置可以使用tab键补齐命令
编辑/etc/profile文件,添加一行

source <(kubectl completion bash)

编辑完成后,执行source /etc/profile 使其生效

注意:bash-completion.noarch这个包必须要安装才行


启用vim粘贴模式

cat <<EOF >> .vimrc
> set paste
> EOF

删除node节点

例:

kubectl drain vms11.cka.cc --delete-local-data --force --ignore-daemonsets
kubectl delete node vms11.cka.cc

Heapster (已被官方弃用)
Heapster是容器集群监控和性能分析工具

下载 heapster镜像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4

执行yaml文件

kubectl apply -f heapster-mod.yaml

kubectl apply -f heapster.yaml

稍等片刻后查看效果

在这里插入图片描述


heapster-mod.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:heapster
rules:
- apiGroups:
  - ""
  resources:
  - events
  - namespaces
  - nodes
  - pods
  - nodes/stats
  verbs:
  - create
  - get
  - list
  - watch
- apiGroups:
  - extensions
  resources:
  - deployments
  verbs:
  - get
  - list
  - watch

heapster.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: heapster
  namespace: kube-system

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: heapster
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:heapster
subjects:
- kind: ServiceAccount
  name: heapster
  namespace: kube-system

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  selector:
      matchLabels:
        k8s-app: heapster
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
    spec:
      serviceAccountName: heapster
      containers:
      - name: heapster
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4
        command:
        - /heapster
        - --source=kubernetes:https://kubernetes.default?useServiceAccount=true&kubeletHttps=true&kubeletPort=10250&insecure=true
---
apiVersion: v1
kind: Service
metadata:
  labels:
    task: monitoring
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: Heapster
  name: heapster
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 8082
  selector:
    k8s-app: heapster
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐