快速部署K8S集群
一、kubekey方式
文章参考链接:
GitHub:https://github.com/kubesphere/kubekey
kubesphere:https://get-images.kubesphere.io
微信公众号:别再手动搭 K8s 了,这个工具 10 分钟搞定(云原生测试补给站)
下载kubekey
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">curl -sfL https://get-kk.kubesphere.io | VERSION=vx.xx.xx sh - <span style="color:#008000"># x.xx.xx为版本号</span>
</code></span></span></span>
由于下载网站再国外,国内网络下载可能会很慢或者下载不成功,可以采用下面方式下载:
① 官方方案(个人感觉不好用)
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#0000ff">export</span> KKZONE=cn <span style="color:#008000"># 设置变量</span>
curl -sfL https://get-kk.kubesphere.io | VERSION=vx.xx.xx sh - <span style="color:#008000"># x.xx.xx为版本号</span>
</code></span></span></span>
② 个人推荐方案(手动下载后上传到服务器)
kubekey下载地址:https://github.com/kubesphere/kubekey/releases
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">tar zxvf kubekey-vx.xx.xx-*.tar.gz <span style="color:#008000"># 解压软件包</span>
./kk version <span style="color:#008000"># 查看版本</span>
</code></span></span></span>
生成配置信息
kubekey版本低于4.0
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk version --show-supported-k8s
</code></span></span></span>
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk create config --with-kubernetes vx.xx.xx <span style="color:#008000"># x.xx.xx替换为你需要安装的k8s版本</span>
</code></span></span></span>
生成 config-sample.yaml 文件,文件内容大致如下:(重点修改标颜色部分内容,name、ip地址、用户名和密码)
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-yaml"><span style="color:#ff0000">apiVersion:</span> <span style="color:#a31515">kubekey.kubesphere.io/v1alpha2</span>
<span style="color:#ff0000">kind:</span> <span style="color:#a31515">Cluster</span>
<span style="color:#ff0000">metadata:</span>
<span style="color:#ff0000">name:</span> <span style="color:#a31515">sample</span>
<span style="color:#ff0000">spec:</span>
<span style="color:#ff0000">hosts:</span>
<span style="color:#00b0e8">-</span> {<span style="color:#ff0000">name:</span> <span style="color:#a31515">Master01</span>, <span style="color:#ff0000">address:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.6</span>, <span style="color:#ff0000">internalAddress:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.6</span>, <span style="color:#ff0000">user:</span> <span style="color:#a31515">root</span>, <span style="color:#ff0000">password:</span> <span style="color:#a31515">"QAZ@2wsx"</span>}
<span style="color:#00b0e8">-</span> {<span style="color:#ff0000">name:</span> <span style="color:#a31515">node01</span>, <span style="color:#ff0000">address:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.144</span>, <span style="color:#ff0000">internalAddress:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.144</span>, <span style="color:#ff0000">user:</span> <span style="color:#a31515">root</span>, <span style="color:#ff0000">password:</span> <span style="color:#a31515">"QAZ@2wsx"</span>}
<span style="color:#00b0e8">-</span> {<span style="color:#ff0000">name:</span> <span style="color:#a31515">node02</span>, <span style="color:#ff0000">address:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.121</span>, <span style="color:#ff0000">internalAddress:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.121</span>, <span style="color:#ff0000">user:</span> <span style="color:#a31515">root</span>, <span style="color:#ff0000">password:</span> <span style="color:#a31515">"QAZ@2wsx"</span>}
<span style="color:#ff0000">roleGroups:</span>
<span style="color:#ff0000">etcd:</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">Master01</span>
<span style="color:#ff0000">control-plane:</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">Master01</span>
<span style="color:#ff0000">worker:</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">node01</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">node02</span>
<span style="color:#ff0000">controlPlaneEndpoint:</span>
<span style="color:#008000">## Internal loadbalancer for apiservers </span>
<span style="color:#008000"># internalLoadbalancer: haproxy</span>
<span style="color:#ff0000">domain:</span> <span style="color:#a31515">lb.kubesphere.local</span>
<span style="color:#ff0000">address:</span> <span style="color:#a31515">""</span>
<span style="color:#ff0000">port:</span> <span style="color:#880000">6443</span>
<span style="color:#ff0000">kubernetes:</span>
<span style="color:#ff0000">version:</span> <span style="color:#a31515">v1.33.4</span>
<span style="color:#ff0000">clusterName:</span> <span style="color:#a31515">cluster.local</span>
<span style="color:#ff0000">autoRenewCerts:</span> <span style="color:#a31515">true</span>
<span style="color:#ff0000">containerManager:</span> <span style="color:#a31515">containerd</span>
<span style="color:#ff0000">etcd:</span>
<span style="color:#ff0000">type:</span> <span style="color:#a31515">kubekey</span>
<span style="color:#ff0000">network:</span>
<span style="color:#ff0000">plugin:</span> <span style="color:#a31515">calico</span>
<span style="color:#ff0000">kubePodsCIDR:</span> <span style="color:#880000">10.233</span><span style="color:#880000">.64</span><span style="color:#880000">.0</span><span style="color:#a31515">/18</span>
<span style="color:#ff0000">kubeServiceCIDR:</span> <span style="color:#880000">10.233</span><span style="color:#880000">.0</span><span style="color:#880000">.0</span><span style="color:#a31515">/18</span>
<span style="color:#008000">## multus support. https://github.com/k8snetworkplumbingwg/multus-cni</span>
<span style="color:#ff0000">multusCNI:</span>
<span style="color:#ff0000">enabled:</span> <span style="color:#a31515">false</span>
<span style="color:#ff0000">registry:</span>
<span style="color:#ff0000">privateRegistry:</span> <span style="color:#a31515">""</span>
<span style="color:#ff0000">namespaceOverride:</span> <span style="color:#a31515">""</span>
<span style="color:#ff0000">registryMirrors:</span> []
<span style="color:#ff0000">insecureRegistries:</span> []
<span style="color:#ff0000">addons:</span> []
</code></span></span></span>
kubekey版本高于4.0
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk create inventory -o .
</code></span></span></span>
会生成 inventory.yaml ,文件内容如下:(重点修改标颜色部分内容)
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-yaml"><span style="color:#ff0000">apiVersion:</span> <span style="color:#a31515">kubekey.kubesphere.io/v1</span>
<span style="color:#ff0000">kind:</span> <span style="color:#a31515">Inventory</span>
<span style="color:#ff0000">metadata:</span>
<span style="color:#ff0000">name:</span> <span style="color:#a31515">default</span>
<span style="color:#ff0000">spec:</span>
<span style="color:#ff0000">hosts:</span> <span style="color:#008000"># your can set all nodes here. or set nodes on special groups.</span>
<span style="color:#ff0000">master01:</span> <span style="color:#008000"># 主机名</span>
<span style="color:#ff0000">connector:</span>
<span style="color:#ff0000">tyep:</span> <span style="color:#a31515">ssh</span>
<span style="color:#ff0000">host:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.6</span>
<span style="color:#ff0000">port:</span> <span style="color:#880000">22</span>
<span style="color:#ff0000">user:</span> <span style="color:#a31515">root</span>
<span style="color:#ff0000">password:</span> <span style="color:#a31515">QAZ@2wsx</span>
<span style="color:#ff0000">internal_ipv4:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.6</span>
<span style="color:#ff0000">node01:</span> <span style="color:#008000"># 主机名</span>
<span style="color:#ff0000">connector:</span>
<span style="color:#ff0000">type:</span> <span style="color:#a31515">ssh</span>
<span style="color:#ff0000">host:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.144</span>
<span style="color:#ff0000">port:</span> <span style="color:#880000">22</span>
<span style="color:#ff0000">user:</span> <span style="color:#a31515">root</span>
<span style="color:#ff0000">password:</span> <span style="color:#a31515">QAZ@2wsx</span>
<span style="color:#ff0000">internal_ipv4:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.144</span>
<span style="color:#ff0000">node02:</span> <span style="color:#008000"># 主机名</span>
<span style="color:#ff0000">connector:</span>
<span style="color:#ff0000">type:</span> <span style="color:#a31515">ssh</span>
<span style="color:#ff0000">host:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.121</span>
<span style="color:#ff0000">port:</span> <span style="color:#880000">22</span>
<span style="color:#ff0000">user:</span> <span style="color:#a31515">root</span>
<span style="color:#ff0000">password:</span> <span style="color:#a31515">QAZ@2wsx</span>
<span style="color:#ff0000">internal_ipv4:</span> <span style="color:#880000">192.168</span><span style="color:#880000">.0</span><span style="color:#880000">.121</span>
<span style="color:#ff0000">groups:</span>
<span style="color:#008000"># all kubernetes nodes.</span>
<span style="color:#ff0000">k8s_cluster:</span>
<span style="color:#ff0000">groups:</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">kube_control_plane</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">kube_worker</span>
<span style="color:#008000"># control_plane nodes</span>
<span style="color:#ff0000">kube_control_plane:</span>
<span style="color:#ff0000">hosts:</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">master01</span>
<span style="color:#008000"># worker nodes</span>
<span style="color:#ff0000">kube_worker:</span>
<span style="color:#ff0000">hosts:</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">master01</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">node01</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">node02</span>
<span style="color:#008000"># etcd nodes when etcd_deployment_type is external</span>
<span style="color:#ff0000">etcd:</span>
<span style="color:#ff0000">hosts:</span>
<span style="color:#00b0e8">-</span> <span style="color:#a31515">master01</span>
<span style="color:#008000"># image_registry:</span>
<span style="color:#008000"># hosts:</span>
<span style="color:#008000"># - localhost</span>
<span style="color:#008000"># nfs nodes for registry storage. and kubernetes nfs storage</span>
<span style="color:#008000"># nfs:</span>
<span style="color:#008000"># hosts:</span>
<span style="color:#008000"># - localhost</span>
</code></span></span></span>
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk create config --with-kubernetes <Kubernetes version> -o .
</code></span></span></span>
会生成 config-.yaml ,文件内容如下:
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-yaml"><span style="color:#ff0000">apiVersion:</span> <span style="color:#a31515">kubekey.kubesphere.io/v1</span>
<span style="color:#ff0000">kind:</span> <span style="color:#a31515">Config</span>
<span style="color:#ff0000">spec:</span>
<span style="color:#008000"># If set to "cn", online downloads will prioritize domestic sources when available.</span>
<span style="color:#ff0000">zone:</span> <span style="color:#a31515">"cn"</span> <span style="color:#008000">## 此处很重要,如果填会导致你的镜像下载不成功</span>
<span style="color:#ff0000">kubernetes:</span>
<span style="color:#008000"># Specify the Kubernetes version to be installed.</span>
<span style="color:#ff0000">kube_version:</span> <span style="color:#a31515">v1.34.3</span>
<span style="color:#008000"># Specify the Helm version to be installed.</span>
<span style="color:#ff0000">helm_version:</span> <span style="color:#a31515">v3.18.5</span>
<span style="color:#008000"># Tag for the sandbox (pause) image used by pods.</span>
<span style="color:#ff0000">sandbox_image:</span>
<span style="color:#ff0000">tag:</span> <span style="color:#a31515">"3.10.1"</span>
<span style="color:#ff0000">control_plane_endpoint:</span>
<span style="color:#008000"># Supported HA types: local, kube-vip, haproxy.</span>
<span style="color:#008000"># If set to local, configure local hostname resolution as follows:</span>
<span style="color:#008000"># - Control-plane nodes: 127.0.0.1 .kubernetes.control_plane_endpoint.host</span>
<span style="color:#008000"># - Worker nodes: .init_kubernetes_node .kubernetes.control_plane_endpoint.host</span>
<span style="color:#ff0000">type:</span> <span style="color:#a31515">local</span>
<span style="color:#008000"># Kube-vip image tag used for static pod deployment (when type is kube-vip).</span>
<span style="color:#ff0000">kube_vip:</span>
<span style="color:#ff0000">image:</span>
<span style="color:#ff0000">tag:</span> <span style="color:#a31515">v0.7.2</span>
<span style="color:#008000"># HAProxy image tag used for static pod deployment (when type is haproxy).</span>
<span style="color:#ff0000">haproxy:</span>
<span style="color:#ff0000">image:</span>
<span style="color:#ff0000">tag:</span> <span style="color:#880000">2.9</span><span style="color:#880000">.6</span><span style="color:#a31515">-alpine</span>
<span style="color:#ff0000">etcd:</span>
<span style="color:#008000"># Specify the etcd version to be installed.</span>
<span style="color:#ff0000">etcd_version:</span> <span style="color:#a31515">v3.6.5</span>
<span style="color:#ff0000">image_registry:</span>
<span style="color:#008000"># Image registry type to install. Supported: harbor, docker-registry.</span>
<span style="color:#008000"># Leave empty to skip installation (assuming an existing registry is available).</span>
<span style="color:#ff0000">type:</span> <span style="color:#a31515">""</span>
<span style="color:#008000"># auth:</span>
<span style="color:#008000"># # Address of the private image registry. Format: host:port/project</span>
<span style="color:#008000"># # The port (if present) is used as http_port when plain_http=true,</span>
<span style="color:#008000"># # or as https_port when plain_http=false.</span>
<span style="color:#008000"># registry: "dockerhub.kubekey.local"</span>
<span style="color:#008000"># # Use plain HTTP (no TLS). Default is false.</span>
<span style="color:#008000"># plain_http: false</span>
<span style="color:#008000"># username: admin</span>
<span style="color:#008000"># password: Harbor12345</span>
<span style="color:#008000"># Specify a VIP for image registry high availability. If set, enables HA.</span>
<span style="color:#ff0000">ha_vip:</span> <span style="color:#a31515">""</span>
<span style="color:#008000"># ========== Image Registry - High Availability ==========</span>
<span style="color:#008000"># keepalived image tag for load balancing when multiple registry nodes exist.</span>
<span style="color:#008000"># keepalived_version: 2.3.4</span>
<span style="color:#008000"># ========== Image Registry - Harbor ==========</span>
<span style="color:#008000"># Image registry port settings. Usually you do not need to set them manually;</span>
<span style="color:#008000"># they are derived from image_registry.auth.registry and plain_http.</span>
<span style="color:#008000"># http_port: 80</span>
<span style="color:#008000"># https_port: 443</span>
<span style="color:#008000"># Harbor image tag (only valid if type is harbor).</span>
<span style="color:#008000">#harbor_version: v2.10.2</span>
<span style="color:#008000"># docker-compose binary</span>
<span style="color:#008000">#dockercompose_version: v2.20.3</span>
<span style="color:#008000"># ========== Image Registry - Docker Registry ==========</span>
<span style="color:#008000"># Docker Registry image tag (only valid if type is docker-registry).</span>
<span style="color:#008000"># docker_registry_version: 2.8.3</span>
<span style="color:#ff0000">cri:</span>
<span style="color:#008000"># Container runtime type. Supported: containerd, docker.</span>
<span style="color:#ff0000">container_manager:</span> <span style="color:#a31515">containerd</span>
<span style="color:#008000"># ========== CRI Tool ==========</span>
<span style="color:#008000"># crictl binary version.</span>
<span style="color:#ff0000">crictl_version:</span> <span style="color:#a31515">v1.34.0</span>
<span style="color:#008000"># ========== Docker Runtime ==========</span>
<span style="color:#008000"># Docker binary version.</span>
<span style="color:#008000">#docker_version: 25.0.5</span>
<span style="color:#008000"># cridockerd version (required for Kubernetes 1.24+).</span>
<span style="color:#008000"># cridockerd_version: v0.3.21</span>
<span style="color:#008000"># ========== Containerd Runtime ==========</span>
<span style="color:#008000"># containerd binary version (active only when container_manager is containerd).</span>
<span style="color:#008000"># containerd_version: v1.7.13</span>
<span style="color:#008000"># runc binary version (active only when container_manager is containerd).</span>
<span style="color:#008000"># runc_version: v1.1.12</span>
<span style="color:#ff0000">cni:</span>
<span style="color:#008000"># CNI plugin type. Supported: calico, cilium, flannel, hybridnet, kubeovn, other</span>
<span style="color:#ff0000">type:</span> <span style="color:#a31515">calico</span>
<span style="color:#008000"># ========== Multi-CNI ==========</span>
<span style="color:#008000"># Multi-CNI type. Supported: multus, spiderpool, none.</span>
<span style="color:#ff0000">multi_cni:</span> <span style="color:#a31515">none</span>
<span style="color:#008000"># ========== Multi-CNI - Multus ==========</span>
<span style="color:#008000"># Image tag for Multus (configure if needed).</span>
<span style="color:#008000"># multus:</span>
<span style="color:#008000"># image:</span>
<span style="color:#008000"># tag: v4.2.4</span>
<span style="color:#008000"># ========== Multi-CNI - Spiderpool ==========</span>
<span style="color:#008000"># Spiderpool version (configure if needed).</span>
<span style="color:#008000"># spiderpool_version: v1.1.1</span>
<span style="color:#008000"># ========== Calico CNI ==========</span>
<span style="color:#008000"># Calico version (effective only when type is calico).</span>
<span style="color:#ff0000">calico_version:</span> <span style="color:#a31515">v3.31.3</span>
<span style="color:#008000"># ========== Cilium CNI ==========</span>
<span style="color:#008000"># Cilium version (effective only when type is cilium).</span>
<span style="color:#008000"># cilium_version: 1.19.1</span>
<span style="color:#008000"># ========== Flannel CNI ==========</span>
<span style="color:#008000"># Flannel version (effective only when type is flannel).</span>
<span style="color:#008000">#flannel_version: v0.27.4</span>
<span style="color:#008000"># ========== Kube-OVN CNI ==========</span>
<span style="color:#008000"># Kube-OVN version (effective only when type is kubeovn).</span>
<span style="color:#008000">#kubeovn_version: v1.15.0</span>
<span style="color:#008000"># ========== Hybridnet CNI ==========</span>
<span style="color:#008000"># Hybridnet version (effective only when type is hybridnet).</span>
<span style="color:#008000">#hybridnet_version: 0.6.8</span>
<span style="color:#ff0000">storage_class:</span>
<span style="color:#008000"># ========== Storage Class Configuration ==========</span>
<span style="color:#008000"># ========== Local/OpenEBS Storage Class ==========</span>
<span style="color:#008000"># Local storage class settings.</span>
<span style="color:#ff0000">local:</span>
<span style="color:#ff0000">enabled:</span> <span style="color:#a31515">true</span> <span style="color:#008000"># Enable the local storage class.</span>
<span style="color:#ff0000">default:</span> <span style="color:#a31515">true</span> <span style="color:#008000"># Set as the default storage class.</span>
<span style="color:#008000"># openebs/dynamic-localpv-provisioner helm chart version.</span>
<span style="color:#ff0000">localpv_provisioner_version:</span> <span style="color:#880000">4.4</span><span style="color:#880000">.0</span>
<span style="color:#008000"># ========== NFS Storage Class ==========</span>
<span style="color:#ff0000">nfs:</span>
<span style="color:#ff0000">enabled:</span> <span style="color:#a31515">false</span> <span style="color:#008000"># Enable the NFS storage class.</span>
<span style="color:#008000"># nfs-provisioner Helm chart version.</span>
<span style="color:#008000">#nfs_provisioner_version: 4.0.18</span>
<span style="color:#ff0000">dns:</span>
<span style="color:#008000"># CoreDNS settings.</span>
<span style="color:#ff0000">coredns:</span>
<span style="color:#ff0000">image:</span>
<span style="color:#ff0000">tag:</span> <span style="color:#a31515">v1.12.1</span>
<span style="color:#008000"># NodeLocalDNS settings.</span>
<span style="color:#ff0000">nodelocaldns:</span>
<span style="color:#ff0000">enabled:</span> <span style="color:#a31515">true</span>
<span style="color:#ff0000">image:</span>
<span style="color:#ff0000">tag:</span> <span style="color:#880000">1.26</span><span style="color:#880000">.4</span>
<span style="color:#008000"># the external images will to add in packages</span>
</code></span></span></span>
初始化OS依赖
kubekey版本低于4.0
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk init os -f config-sample.yaml
</code></span></span></span>
kubekey版本高于4.0
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk init os -i inventory.yaml -c config-<Kubernetes version>.yaml
</code></span></span></span>
创建集群
kubekey版本低于4.0
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk create cluster -f config-sample.yaml
</code></span></span></span>
kubekey版本高于4.0
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">./kk create cluster -i inventory.yaml -c config-<Kubernetes version>.yaml
</code></span></span></span>
验证集群
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-plain">kubectl get nodes -o wide
kubectl get pods _A
</code></span></span></span>
node节点状态均为Ready为正常,pod状态均为Running为正常

二、kubespray方式
文章参考链接:
roc 云原生:使用 kubespray 搭建集群 | Kubernetes 实践指南
准备工作
下载kubespray
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">git <span style="color:#0000ff">clone</span> --depth=1 https://github.com/kubernetes-sigs/kubespray.git
</code></span></span></span>
正常国内采用上面命令下载是不成功的,建议去github下载后上传到服务器
下载地址:https://github.com/kubernetes-sigs/kubespray/releases
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#008000"># zip包解压 </span>
unzip kubespray-<kubespray version>.zip
<span style="color:#008000"># tar包解压</span>
tra zxvf kubespray-<kubespray version>.zip
</code></span></span></span>
安装依赖
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#0000ff">cd</span> kubespray-<kubespray version>
pip3 install -r requirements.txt
</code></span></span></span>
这里很容易出现下面的这种报错,这种报错原因是你的操作系统版本太低,kubespray版本太高的问题,换个高版本操作系统或者低版本kubespray就可以了

复制配置文件
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#0000ff">cp</span> -rfp inventory/sample inventory/mycluster
</code></span></span></span>
配置文件结构如下:
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#0000ff">cd</span> inventory
tree
</code></span></span></span>
.
├── local
│ ├── group_vars -> ../sample/group_vars
│ └── hosts.ini
├── mycluster
│ ├── group_vars
│ │ ├── all
│ │ │ ├── all.yml
│ │ │ ├── aws.yml
│ │ │ ├── azure.yml
│ │ │ ├── containerd.yml
│ │ │ ├── coreos.yml
│ │ │ ├── cri-o.yml
│ │ │ ├── docker.yml
│ │ │ ├── etcd.yml
│ │ │ ├── gcp.yml
│ │ │ ├── hcloud.yml
│ │ │ ├── huaweicloud.yml
│ │ │ ├── oci.yml
│ │ │ ├── offline.yml
│ │ │ ├── openstack.yml
│ │ │ ├── upcloud.yml
│ │ │ └── vsphere.yml
│ │ └── k8s_cluster
│ │ ├── addons.yml
│ │ ├── k8s-cluster.yml
│ │ ├── k8s-net-calico.yml
│ │ ├── k8s-net-cilium.yml
│ │ ├── k8s-net-custom-cni.yml
│ │ ├── k8s-net-flannel.yml
│ │ ├── k8s-net-kube-ovn.yml
│ │ ├── k8s-net-kube-router.yml
│ │ ├── k8s-net-macvlan.yml
│ │ └── kube_control_plane.yml
│ └── inventory.ini
└── sample
├── group_vars
│ ├── all
│ │ ├── all.yml
│ │ ├── aws.yml
│ │ ├── azure.yml
│ │ ├── containerd.yml
│ │ ├── coreos.yml
│ │ ├── cri-o.yml
│ │ ├── docker.yml
│ │ ├── etcd.yml
│ │ ├── gcp.yml
│ │ ├── hcloud.yml
│ │ ├── huaweicloud.yml
│ │ ├── oci.yml
│ │ ├── offline.yml
│ │ ├── openstack.yml
│ │ ├── upcloud.yml
│ │ └── vsphere.yml
│ └── k8s_cluster
│ ├── addons.yml
│ ├── k8s-cluster.yml
│ ├── k8s-net-calico.yml
│ ├── k8s-net-cilium.yml
│ ├── k8s-net-custom-cni.yml
│ ├── k8s-net-flannel.yml
│ ├── k8s-net-kube-ovn.yml
│ ├── k8s-net-kube-router.yml
│ ├── k8s-net-macvlan.yml
│ └── kube_control_plane.yml
└── inventory.ini
10 directories, 55 files
修改配置文件
基本配置修改
配置文件:inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#008000"># 选择网络插件,支持 cilium, calico, weave 和 flannel</span>
kube_network_plugin: calico
<span style="color:#008000"># 设置 Service 网段</span>
kube_service_addresses: 10.233.0.0/18
<span style="color:#008000"># 设置 Pod 网段</span>
kube_pods_subnet: 10.233.64.0/18
<span style="color:#008000"># 支持 docker, crio 和 containerd,推荐 containerd.</span>
container_manager: containerd
<span style="color:#008000"># 是否开启 kata containers</span>
kata_containers_enabled: <span style="color:#a31515">false</span>
<span style="color:#008000"># 是否开启自动更新证书,推荐开启。</span>
auto_renew_certificates: <span style="color:#a31515">true</span>
</code></span></span></span>
准备机器列表
配置文件:inventory/mycluster/inventory.ini
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">[all]
master01 ansible_host=192.168.0.6
node01 ansible_host=192.168.0.144
node02 ansible_host=192.168.0.121
[all:vars]
ansible_user=root
ansible_password=QAZ@2wsx
[kube_control_plane]
master01
[etcd]
master01
[kube_node]
master01
node01
node02
[calico_rr]
[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
</code></span></span></span>
使用密码登录需要安装sshpass才能正常执行
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">旧版本系统:
sudo yum -y install sshpass
新版本系统:
sudo dnf -y install sshpass
</code></span></span></span>
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">sudo apt -y install sshpass
</code></span></span></span>
国内离线包准备(如果可以正常下载国外镜像此节点可忽略)
下载镜像及软件包
生成依赖文件和镜像列表
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#0000ff">cd</span> contrib/offline
bash generate_list.sh
</code></span></span></span>
生成之后正常可以看到下内容

files.list 是依赖文件的列表
images.list 是依赖镜像的列表
下载静态文件
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">wget -x -P temp/files -i temp/files.list
</code></span></span></span>
设置下载服务(为了方便安装的时候可以通过自己的服务进行下载)
安装nginx
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"> 旧版本系统:
sudo yum -y install nginx
新版本系统:
sudo dnf -y install nginx
</code></span></span></span>
设置nginx配置文件
配置文件目录:**/etc/nginx/conf.d/download.conf **没有这个文件可以创建这个文件
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">server {
<span style="color:#008000"># 监听端口,如果 80 被占用或没有公网 IP,可以改为 8080 等高位端口</span>
listen 80;
<span style="color:#008000"># 如果有域名填域名,没有域名填 localhost 或您的内网 IP</span>
server_name localhost;
<span style="color:#008000"># 定义下载路径,访问 http://IP/download/ 即可看到文件列表</span>
location /download/ {
<span style="color:#008000"># 【核心】指定本地文件的绝对路径</span>
<span style="color:#008000"># Windows 用户注意:路径请使用正斜杠 / 或双反斜杠 \\,例如:D:/my_share_files/ 或 D:\\my_share_files\\</span>
<span style="color:#008000"># Linux 用户注意:路径末尾必须带斜杠,例如:/data/my_share_files/</span>
<span style="color:#0000ff">alias</span> /root/kubespray/contrib/offline/temp/files/;
<span style="color:#008000"># 【核心】开启目录浏览功能(像 FTP 一样显示文件列表)</span>
autoindex on;
autoindex_exact_size off; <span style="color:#008000"># 显示文件大小(KB/MB),而不是精确的字节数</span>
autoindex_localtime on; <span style="color:#008000"># 显示文件时间为服务器本地时间</span>
<span style="color:#008000"># 解决中文文件名/目录名乱码问题</span>
charset utf-8;
<span style="color:#008000"># 大文件下载优化(防止下载大文件时内存占用过高或超时)</span>
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300; <span style="color:#008000"># 增加超时时间,防止大文件下载中断</span>
}
}
</code></span></span></span>
启动nginx
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash">nginx -t <span style="color:#008000"># 检测配置文件内容是否正确</span>
systemctl restart nginx
</code></span></span></span>
修改配置文件
配置文件路径:inventory/mycluster/group_vars/all/offline.yml,可以按照以下修改,具体版本不同需要的内容不通
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#008000"># 可以修改成自己的镜像仓库</span>
registry_host: <span style="color:#a31515">"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/"</span>
<span style="color:#008000"># 修改成自己nginx服务器的IP地址+目录</span>
files_repo: <span style="color:#a31515">"http://IP/download/"</span>
<span style="color:#008000">### If using CentOS, RedHat, AlmaLinux or Fedora</span>
<span style="color:#008000"># yum_repo: "http://myinternalyumrepo"</span>
<span style="color:#008000">### If using Debian</span>
<span style="color:#008000"># debian_repo: "http://myinternaldebianrepo"</span>
<span style="color:#008000">### If using Ubuntu</span>
<span style="color:#008000"># ubuntu_repo: "http://myinternalubunturepo"</span>
<span style="color:#008000">## Container Registry overrides</span>
<span style="color:#008000"># 参考以下内容修改,如果你有镜像仓库可以略微修改下</span>
kube_image_repo: <span style="color:#a31515">"{{ registry_host/registry.k8s.io }}"</span>
gcr_image_repo: <span style="color:#a31515">"{{ registry_host/gcr.io }}"</span>
github_image_repo: <span style="color:#a31515">"{{ registry_host/ghcr.io }}"</span>
docker_image_repo: <span style="color:#a31515">"{{ registry_host/docker.io }}"</span>
quay_image_repo: <span style="color:#a31515">"{{ registry_host/quay.io }}"</span>
<span style="color:#008000">## Kubernetes components</span>
kubeadm_download_url: <span style="color:#a31515">"{{ files_repo }}/dl.k8s.io/release/v{{ kube_version }}/bin/linux/{{ image_arch }}/kubeadm"</span>
kubectl_download_url: <span style="color:#a31515">"{{ files_repo }}/dl.k8s.io/release/v{{ kube_version }}/bin/linux/{{ image_arch }}/kubectl"</span>
kubelet_download_url: <span style="color:#a31515">"{{ files_repo }}/dl.k8s.io/release/v{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet"</span>
<span style="color:#008000">## Two options - Override entire repository or override only a single binary.</span>
<span style="color:#008000">## [Optional] 1 - Override entire binary repository</span>
<span style="color:#008000"># github_url: "https://my_github_proxy"</span>
<span style="color:#008000"># dl_k8s_io_url: "https://my_dl_k8s_io_proxy"</span>
<span style="color:#008000"># storage_googleapis_url: "https://my_storage_googleapi_proxy"</span>
<span style="color:#008000"># get_helm_url: "https://my_helm_sh_proxy"</span>
<span style="color:#008000">## [Optional] 2 - Override a specific binary</span>
<span style="color:#008000">## CNI Plugins</span>
cni_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/containernetworking/plugins/releases/download/v{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-v{{ cni_version }}.tgz"</span>
<span style="color:#008000">## cri-tools</span>
crictl_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/kubernetes-sigs/cri-tools/releases/download/v{{ crictl_version }}/crictl-v{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"</span>
<span style="color:#008000">## [Optional] etcd: only if you use etcd_deployment=host</span>
etcd_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/etcd-io/etcd/releases/download/v{{ etcd_version }}/etcd-v{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"</span>
<span style="color:#008000"># [Optional] Calico: If using Calico network plugin</span>
calicoctl_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/projectcalico/calico/releases/download/v{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"</span>
<span style="color:#008000"># [Optional] Calico with kdd: If using Calico network plugin with kdd datastore</span>
calico_crds_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/projectcalico/calico/archive/v{{ calico_version }}.tar.gz"</span>
<span style="color:#008000"># [Optional] Cilium: If using Cilium network plugin</span>
ciliumcli_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/cilium/cilium-cli/releases/download/v{{ cilium_cli_version }}/cilium-linux-{{ image_arch }}.tar.gz"</span>
<span style="color:#008000"># [Optional] helm: only if you set helm_enabled: true</span>
helm_download_url: <span style="color:#a31515">"{{ files_repo }}/get.helm.sh/helm-v{{ helm_version }}-linux-{{ image_arch }}.tar.gz"</span>
<span style="color:#008000"># [Optional] crun: only if you set crun_enabled: true</span>
crun_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/containers/crun/releases/download/{{ crun_version }}/crun-{{ crun_version }}-linux-{{ image_arch }}"</span>
<span style="color:#008000"># [Optional] kata: only if you set kata_containers_enabled: true</span>
kata_containers_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/kata-containers/kata-containers/releases/download/{{ kata_containers_version }}/kata-static-{{ kata_containers_version }}-{{ image_arch }}.tar.xz"</span>
<span style="color:#008000"># [Optional] cri-dockerd: only if you set container_manager: docker</span>
cri_dockerd_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/Mirantis/cri-dockerd/releases/download/v{{ cri_dockerd_version }}/cri-dockerd-{{ cri_dockerd_version }}.{{ image_arch }}.tgz"</span>
<span style="color:#008000"># [Optional] runc: if you set container_manager to containerd or crio</span>
runc_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/opencontainers/runc/releases/download/v{{ runc_version }}/runc.{{ image_arch }}"</span>
<span style="color:#008000"># [Optional] cri-o: only if you set container_manager: crio</span>
<span style="color:#008000"># crio_download_base: "download.opensuse.org/repositories/devel:kubic:libcontainers:stable"</span>
<span style="color:#008000"># crio_download_crio: "http://{{ crio_download_base }}:/cri-o:/"</span>
crio_download_url: <span style="color:#a31515">"{{ files_repo }}/storage.googleapis.com/cri-o/artifacts/cri-o.{{ image_arch }}.v{{ crio_version }}.tar.gz"</span>
skopeo_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/lework/skopeo-binary/releases/download/v{{ skopeo_version }}/skopeo-linux-{{ image_arch }}"</span>
<span style="color:#008000"># [Optional] containerd: only if you set container_runtime: containerd</span>
containerd_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/containerd/containerd/releases/download/v{{ containerd_version }}/containerd-{{ containerd_version }}-linux-{{ image_arch }}.tar.gz"</span>
nerdctl_download_url: <span style="color:#a31515">"{{ files_repo }}/github.com/containerd/nerdctl/releases/download/v{{ nerdctl_version }}/nerdctl-{{ nerdctl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"</span>
<span style="color:#008000"># [Optional] runsc,containerd-shim-runsc: only if you set gvisor_enabled: true</span>
gvisor_runsc_download_url: <span style="color:#a31515">"{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/runsc"</span>
gvisor_containerd_shim_runsc_download_url: <span style="color:#a31515">"{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/containerd-shim-runsc-v1"</span>
</code></span></span></span>
部署集群
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-bash"><span style="color:#008000"># 回到kubespray主目录再执行下面命令</span>
ansible-playbook \
-i inventory/mycluster/inventory.ini \
cluster.yml
</code></span></span></span>
验证集群
<span style="color:#7d8b8d"><span style="background-color:#ffffff"><span style="color:#333333"><code class="language-plain">kubectl get nodes -o wide
kubectl get pods _A
</code></span></span></span>
node节点状态均为Ready为正常,pod状态均为Running为正常

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)