k8s 部署以后需要做什么

引言

本文针对 k8s 已经完成 基本部署
master 节点 已经执行 kubeadm init
woker 节点 已经执行 kubeadm join 的操作

文章中默认 都是执行在master 节点上的命令

本人文章环境 采用kubernetes 1.16.1 版本

接下来 需要做 使一个k8s 集群功能丰富起来

  • 部署网络插件
  • 部署ingress-controller
  • 安装dashboard
  • 安装helm
  • 安装prometheus
  • 安装ELK

0.命令自动补全

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

效果如下 可使用tab 补全 或查看 k8s 资源对象

[root@master ~]# kubectl get pod -n 
default          kube-node-lease  kube-public      kube-system      nginx-ingress
[root@master ~]# kubectl get pod -n kube-system 
coredns-dc4d494c8-7qtwp         kube-controller-manager-master  kube-proxy-7q6t5
coredns-dc4d494c8-t5pbj         kube-flannel-ds-amd64-b9zns     kube-proxy-rfxgj
etcd-master                     kube-flannel-ds-amd64-pwqxn     kube-proxy-x8884
kube-apiserver-master           kube-flannel-ds-amd64-xd4js     kube-scheduler-master

资源不足的小伙伴可以顺手把 master 污点关了
kubectl taint nodes --all node-role.kubernetes.io/master-


1. 部署网络插件

目前主流 calico 和 flannel 两者选其一即可

安装 calico 插件 (推荐)

kubectl apply -f http://kuboard.cn/install-script/calico/calico-3.9.2.yaml

2020-09-20 calico 最新版本为 3.16.1

安装 flannel 插件

kubectl apply -f raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果无法访问githubusercontent.com 可 wget http://106.15.203.166:15500/kube-flannel 下载 1.16 版本flannel

2. 安装ingress-controller

ingress 可用于k8s集群做7层 nginx反向代理

kubectl apply -f https://kuboard.cn/install-script/v1.19.x/nginx-ingress.yaml

3. 安装kuboard + metrics 、 安装 Kubernetes Dashboard

# 安装kuboard + metrics
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml
# 需要访问 kuboard 时 通过一下命令获取token
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

# 安装 Kubernetes Dashboard
kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/v2.0.0-beta5.yaml
# 可能存在无法访问问题 请参考 https://blog.51cto.com/10616534/2430512
#  需要访问 Dashboard 时 通过一下命令获取token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

4. 安装helm

# 下载 helm 2.13.1
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
# 解压
tar zxvf helm-v2.13.1-linux-amd64.tar.gz
cp -a linux-amd64/helm /usr/local/bin/
chmod a+x /usr/local/bin/helm

cat > rbac-config.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
# apiVersion: rbac.authorization.k8s.io/v1     # k8s 1.17版本以上需要使用这个 
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
EOF

cat > tiller.yaml <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: helm
    name: tiller
  name: tiller-deploy
  namespace: kube-system
spec:
  replicas: 1
  strategy: {}
  selector:
    matchLabels:
      app: helm
      name: tiller
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: helm
        name: tiller
    spec:
      serviceAccount: tiller
      automountServiceAccountToken: true
      containers:
      - env:
        - name: TILLER_NAMESPACE
          value: kube-system
        - name: TILLER_HISTORY_MAX
          value: "0"
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.1
        imagePullPolicy: IfNotPresent
        livenessProbe:
          httpGet:
            path: /liveness
            port: 44135
          initialDelaySeconds: 1
          timeoutSeconds: 1
        name: tiller
        ports:
        - containerPort: 44134
          name: tiller
        - containerPort: 44135
          name: http
        readinessProbe:
          httpGet:
            path: /readiness
            port: 44135
          initialDelaySeconds: 1
          timeoutSeconds: 1
        resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: helm
    name: tiller
  name: tiller-deploy
  namespace: kube-system
spec:
  ports:
  - name: tiller
    port: 44134
    targetPort: tiller
  selector:
    app: helm
    name: tiller
  type: ClusterIP
status:
  loadBalancer: {}
---
EOF

kubectl create -f rbac-config.yaml
kubectl create -f tiller.yaml
# 验证部署完毕 
helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

# 镜像仓库官方地址 https://hub.helm.sh

更新国内 helm 源

helm init --service-account tiller --skip-refresh
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo list

helm 简单用法

编辑 Chart.yaml 文件 其中存放 chart 的名称 和命名空间
创建templates文件夹
templates 中存放项目需要创建的 deployment.yaml service.yaml 等文件
编辑 values.yaml 文件 其中保存 templaste/ yaml 文件中设置的变量 如镜像版本等
通过 cd {chart所在目录} ; helm install . 执行部署
通过 helm upgrade 更新
helm upgrade -f values.yaml {} .
helm list 查看当前 helm 部署应用
helm delete {helmname} 删除应用
helm list deleted 查看已删除应用
helm delete {helmname} --purge 彻底删除应用
helm rollback {helmname} {版本号} 回滚

5. 安装Prometheus

官方地址 https://github.com/coreos/kube-prometheus

组件说明

  1. metricserver: k8s资源使用情况聚合器 收集信息作用
  2. prometheusOperator: 一个系统监控报警的工具箱 用来存储监控数据
  3. nodeExporter: 用来各node关键度量指标状态数据
  4. kubestatemetrics: 收集k8s 集群内资源对象数据 指定高级规则
  5. Prometheus: 采用pull 方式收集apiserver,scheduler,controller-manager,kubelet 组件数据 通过http 协议传输
  6. Grafana: 可视化监控平台

开始安装

git clone https://github.com/coreos/kube-prometheus.git
cd kube-prometheus
# 可提前将 prometheus  alertmanager grafana  service模式改成nodeport
# vim manifests/prometheus-service.yaml 
# vim manifests/alertmanager-service.yaml
# vim manifests/grafana-service.yaml
kubectl apply -f /manifests/setup
kubectl apply -f /manifests/
# 下载镜像可能比较慢  可提前下载 导入docker

验证

当所有pod 以正常启动进行测试

访问prometheus

k8s集群搭建 ELK k8s集群搭建好了怎么用_github


访问grafana

k8s集群搭建 ELK k8s集群搭建好了怎么用_k8s集群搭建 ELK_02


访问Alertmanager

k8s集群搭建 ELK k8s集群搭建好了怎么用_bash_03