kubeadm 安装 k8s 单主集群

环境准备:

      请参考 k8s 安装单机版  猛击这里

      这里我们准备三台 Centos7 虚拟机

  •  k8s-master      # 安装 k8s 主程序
  •  k8s-node1      
  •  k8s-node2

      服务器主机名和 IP 地址规划如下:

192.168.120.174 k8s-master
192.168.120.175 k8s-node1
192.168.120.176 k8s-node2

      防火墙的处理,否则安装过程中会报错

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl  --system #让参数生效

安装所需软件

    在所有接点执行以下操作

yum install  kubelet kubeadm kubectl docker-ce --disableexcludes=kubernetes  -y
#--disableexcludes=kubernetes 禁掉除了这个之外的别的仓库 
systemctl enable --now kubelet

    在所有节点对 docker 进行配置

mkdir /etc/docker
# 配置 cgroup 驱动 和 阿里云镜像加速器
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": ["overlay2.override_kernel_check=true"],
  "registry-mirrors": ["https://zgmke8qe.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl enable --now docker
docker info  # 检查配置是否生效

    集群安装前本地环境的检测

kubeadm init phase preflight

    kubeadm 命令介绍 

kubeadm config print init-defaults # 输出 kubeadm init 默认参数文件的内容
kubeadm config print join-defaults #输出 kubeadm join 默认参数文件的内容
kubeadm config view  # 查看当前集群的配置
kubeadm config images list  # 列出所需的镜像列表
kubeadm config images pull  #拉取镜像到本地

   准备安装需要用到的配置文件

kubeadm config print init-defaults  > init.yaml  #生成默配置文件
# 在配置文件中更改以下部分
# 原文件
localAPIEndpoint:
  advertiseAddress: 1.2.3.4
  bindPort: 6443

imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}
# 更改后的文件
localAPIEndpoint:
  advertiseAddress: 192.168.120.174  # 更改为本机IP 地址
  bindPort: 6443

imageRepository: registry.aliyuncs.com/google_containers # 更改为阿里云仓库
kind: ClusterConfiguration
kubernetesVersion: v1.18.1  # 可以指定 k8s 版本, kubelet kubeadm kubectl 安装时也可以指定
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
# podSubnet: 10.244.0.0/16  # 依据使用的网络插件决定是否配置此选项
scheduler: {}

安装集群

    k8s-master 节点安装主程序

kubeadm init --config=init.yaml  # 用我们更改的配置文件进行安装

    配置 kubectl 命令环境变量参数 (kubeadm 安装完成后会有提示,这些参数是 kubectl 连接集群的凭证 )

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

   k8s-node1 和 k8s-node2  加入集群  (kubeadm 安装完成后会有提示)  

kubeadm join 192.168.120.174:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:2f6bd9c3be747424f38f1783790e58918e3f87e4cbbd5388ff905f02dcb05593 

   token 在 24 小时候将会过期生成新的 token 见以下操作

kubeadm token list #列出已存在的 token
kubeadm token create #生成新的 token
kubeadm token create --ttl 0 # 生成新的 token 指定永不过期
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' # 获取ca证书sha256编码hash值

  刚建立的集群由于网络不通,kubectl get nodes  所有节点的状态显示为 NotReady, 这时候我们需要安装 CNI 网络插件

 kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

  安装官方的 Dashboard  UI

wget  https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml   # 下载 dashaboard 的编排文件
# 在 service 服务中添加 nodePort 配置便于用节点IP 访问 dashboard
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 32000
  selector:
    k8s-app: kubernetes-dashboard
# 镜像策略我们最好设置成这样
imagePullPolicy: IfNotPresent
# 安装 dashboard
kubectl apply -f  recommended.yaml

  为 dashboard 创建 service account, 并绑定权限,以获取集群资源.

vim service-account.yaml  # 文件中写入以下内容
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
#在集群中生成 service account
kubectl apply -f  service-account.yaml

   查找  service account 的 token ,这个 token 是登录 dashboard 的凭证

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')  # 找出 admin-user 这个 service account 的token

   ok, 现在我们可以登录 dashboard ,能够查看和管理 k8s 集群中的资源了,但是我们发现 dashboard 中并不能获取 pod 的 cpu 和 内存的使用率

 

 

    在新版的 k8s 中通过 metric server 连接 每个节点的 kubelet 进程获取集群中的资源消耗状态,下面我们安装  metric server.

# metric server  的 github 地址
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server
# 在 github 中下载需要的编排文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
# 我们需要在编排文件中更改一些参数,否则 metric server 将不能连接 kubelet
# 需要更改的源文件内容
containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server/metrics-server:v0.3.7
        imagePullPolicy: IfNotPresent
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
        ports:
        - name: main-port
          containerPort: 4443
          protocol: TCP
        securityContext:
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
      nodeSelector:
        kubernetes.io/os: linux
        kubernetes.io/arch: "amd64"
# 改变后的内容
 containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server/metrics-server:v0.3.7
        imagePullPolicy: IfNotPresent
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        ports:
        - name: main-port
          containerPort: 4443
          protocol: TCP
        securityContext:
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
      nodeSelector:
        kubernetes.io/os: linux
        kubernetes.io/arch: "amd64"
# 在 k8s 集群中安装 metric server
kubectl apply -f components.yaml 
# 检查 metric server 是否 属于 running 状态
kubectl get pods -n kube-system | grep metric  

    now  dashboard 可以获取到 cpu  memory 使用率的 信息了, perfect

 

 

posted @ 2020-08-10 15:45  步绍训  阅读(422)  评论(0)    收藏  举报