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
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号