目录

使用 kubekey 安装 k8s

流程

来源于 这里

  • 机器: 虚拟机
  • 系统: Ubuntu 22.04.4 LTS
  • cpu: Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz 8核
  • 内存:8G
  • k8s: 1.29
  • kubeedge: 1.19

安装系统完成后执行换源操作

bash

vim /etc/apt/sources.list

写入以下内容

bash

deb http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy main restricted
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy main restricted
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-updates main restricted
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-updates main restricted
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy universe
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy universe
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-updates universe
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-updates universe
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy multiverse
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy multiverse
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-updates multiverse
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-updates multiverse
deb http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security main restricted
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security main restricted
deb http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security universe
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security universe
deb http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security multiverse
deb-src http://mirrors.cloud.aliyuncs.com/ubuntu jammy-security multiverse

修改 dns 网口换成对应的网口

bash

resolvectl dns ens18 114.114.114.114

更新源

bash

apt update && sudo apt upgrade -y 
apt install -y curl apt-transport-https

安装 docker

bash

sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker

拉取镜像

bash


#!/bin/bash

# 定义镜像列表
images=(

"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-apiserver:v4.1.2"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-console:v4.1.2"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-controller-manager:v4.1.2"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/kubectl:v1.27.16"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/redis:7.2.4-alpine"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/haproxy:2.9.6-alpine"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-extensions-museum:v1.1.2"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubeedge/iptables-manager:v1.13.1"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubeedge/cloudcore:v1.13.1"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubeedge/controller-manager:v1.13.1"
"swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/kubeedge-proxy:v0.4.1"

)

# 循环拉取镜像
for image in "${images[@]}"; do
  docker pull "$image"
done

下载 kubekey

bash

curl -sSL https://get-kk.kubesphere.io | sh -

查看 kk 支持的所有 k8s 版本

bash

./kk version --show-supportedocked-k8s

构建配置文件

bash

./kk create manifest --with-kubernetes v1.29.3 --with-registry

将下述内容拷贝到生成的 manifest-sample.yaml 文件中

yaml

spec:
  arches:
  - amd64
  images:
  ## ks-core
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-apiserver:v4.1.2
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-console:v4.1.2
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-controller-manager:v4.1.2
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/kubectl:v1.27.16
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/redis:7.2.4-alpine
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/haproxy:2.9.6-alpine
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-extensions-museum:v1.1.2
  ## kubeedge
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubeedge/iptables-manager:v1.13.1
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubeedge/cloudcore:v1.13.1
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubeedge/controller-manager:v1.13.1
  - swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/kubeedge-proxy:v0.4.1
   
   

构建离线包

bash

./kk artifact export -m manifest-sample.yaml -o kubesphere.tar.gz

成功后会显示

bash

Pipeline[ArtifactExportPipeline] execute successfully

安装 helm

bash

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

下载 KubeSphere Core Helm Chart 包

bash

VERSION=1.1.3     # Chart 版本
helm fetch https://charts.kubesphere.io/main/ks-core-${VERSION}.tgz

接下来会使用到的文件

  • kk
  • kubesphere.tar.gz
  • ks-core-1.1.3.tgz

生成配置

bash

./kk create config --with-kubernetes v1.29.3

修改配置

yaml


apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: node1, address: 10.39.17.213, internalAddress: 10.39.17.213, user: root, password: "root"}
  roleGroups:
    etcd:
    - node1
    control-plane:
    - node1
    worker:
    - node1
    registry:
    - node1
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    # internalLoadbalancer: haproxy

    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.29.3
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager: docker
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  registry:
    type: harbor
    auths:
      "dockerhub.kubekey.local":
        username: admin
        password: Harbor12345
        skipTLSVerify: true
    privateRegistry: "dockerhub.kubekey.local"
    namespaceOverride: "kubesphereio"
    registryMirrors: []
    insecureRegistries: []
  addons: []

创建镜像仓库

bash

./kk init registry -f config-sample.yaml -a kubesphere.tar.gz

创建脚本

bash

#!/usr/bin/env bash

# Copyright 2018 The KubeSphere Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

url="https://dockerhub.kubekey.local"  # 或修改为实际镜像仓库地址
user="admin"
passwd="Harbor12345"

harbor_projects=(
        ks
        kubesphere
        kubesphereio
        coredns
        calico
        flannel
        cilium
        hybridnetdev
        kubeovn
        openebs
        library
        plndr
        jenkins
        argoproj
        dexidp
        openpolicyagent
        curlimages
        grafana
        kubeedge
        nginxinc
        prom
        kiwigrid
        minio
        opensearchproject
        istio
        jaegertracing
        timberio
        prometheus-operator
        jimmidyson
        elastic
        thanosio
        brancz
        prometheus
)

for project in "${harbor_projects[@]}"; do
    echo "creating $project"
    curl -u "${user}:${passwd}" -X POST -H "Content-Type: application/json" "${url}/api/v2.0/projects" -d "{ \"project_name\": \"${project}\", \"public\": true}" -k  # 注意在 curl 命令末尾加上 -k
done

执行脚本

bash

chmod +x create_project_harbor.sh
./create_project_harbor.sh

安装应用

bash

apt install socat ipset ipvsadm conntrack chrony 

安装 k8s

bash

./kk create cluster -f config-sample.yaml -a kubesphere.tar.gz --with-local-storage

安装kubesphere

bash

helm upgrade --install -n kubesphere-system --create-namespace ks-core ks-core-1.1.3.tgz \
     --set global.imageRegistry=dockerhub.kubekey.local/ks \
     --set extension.imageRegistry=dockerhub.kubekey.local/ks \
     --set ksExtensionRepository.image.tag=v1.1.2 \
     --debug \
     --wait
如果检查 etcd 时无法启动

查看 /etc/etcd.env中的配置

toml

ETCD_INITIAL_CLUSTER_STATE=existing

如果你的集群是单节点,则将该值改为 new

建议运行时使用 docker,有些配置不适用于运行时为 containerd 的情况