YAZONG 我的开源

Kubernetes(四)kubespray方式(4.2)kubespray的安装、配置

  , , ,
0 评论0 浏览

生成keygen

#生成keygen(执行ssh-keygen,一路回车下去)
[root@node-1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 回车
Enter same passphrase again: 回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is: 回车
SHA256:phps9vfwC9p8gN2FAZx5dwdvBWuCGKyxAqQ16isvPcs root@node-1
The key's randomart image is:
+---[RSA 2048]----+
| .+    oo+    oo.|
| +..  . =oo.. .oo|
|o  .   +...+..o.o|
|.   . o   . .o . |
| .   . oS. .     |
|  ..  .oo .      |
|.o  = . o.       |
|oooo + +.+.      |
| .Eo. o.oo+.     |
+----[SHA256]-----+

#查看并复制生成的pubkey									node-1
[root@node-X ~]# cat /root/.ssh/id_rsa.pub

#分别登陆到每个节点上,将pubkey写入/root/.ssh/authorized_keys
[root@node-X ~]# mkdir -p /root/.ssh

#三个节点把各自生成的pubkey都重定向到各自节点的下述文件中,即每个节点中包含三个节点的pubkey。
[root@node-X ~]# echo "<上一步骤复制的pubkey>" >> /root/.ssh/authorized_keys
#在三个节点分别尝试登录
[root@node-X ~]# ssh node-1
[root@node-X ~]# ssh node-2
[root@node-X ~]# ssh node-3
[root@node-X ~]# ssh 10.0.0.21
[root@node-X ~]# ssh 10.0.0.22
[root@node-X ~]# ssh 10.0.0.23
[root@node-X ~]# ssh 172.16.1.21
[root@node-X ~]# ssh 172.16.1.22
[root@node-X ~]# ssh 172.16.1.23

安装基础软件

# 安装基础软件(只在node-1安装)
[root@node-1 ~]#  yum install -y epel-release python36 python36-pip git
# 下载kubespray源码
[root@node-1 ~]#  wget https://github.com/kubernetes-sigs/kubespray/archive/v2.15.0.tar.gz
# 解压缩
[root@node-1 ~]# tar -xvf v2.15.0.tar.gz && cd kubespray-2.15.0
# 安装requirements
[root@node-1 kubespray-2.15.0]# pwd
/root/kubespray-2.15.0
[root@node-1 kubespray-2.15.0]# cat requirements.txt			注意这里结合使用到的一系列组件!!!!!!!!!!!利用各自优势。
ansible==2.9.16
jinja2==2.11.1
netaddr==0.7.19
pbr==5.4.4
jmespath==0.9.5
ruamel.yaml==0.16.10
[root@node-1 kubespray-2.15.0]# pip3.6 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --upgrade pip 
#pig是python的工具,上一步安装过
[root@node-1 kubespray-2.15.0]# pip3.6 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt
Successfully installed MarkupSafe-2.0.1 PyYAML-6.0 ansible-2.9.16 cffi-1.15.1 cryptography-38.0.1 jinja2-2.11.1 jmespath-0.9.5 netaddr-0.7.19 pbr-5.4.4 pycparser-2.21 ruamel.yaml-0.16.10 ruamel.yaml.clib-0.2.7
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

生成配置

#生成配置(只在node-1安装)

#项目中有一个目录是集群的基础配置,示例配置在目录inventory/sample中,我们复制一份出来作为自己集群的配置
# copy一份demo配置,准备自定义
[root@node-1 kubespray-2.15.0]# cp -rpf inventory/sample inventory/mycluster
[root@node-1 kubespray-2.15.0]# ll inventory/mycluster
total 8
drwxrwxr-x 4 root root 4096 Jan 15  2021 group_vars
-rw-rw-r-- 1 root root 1002 Jan 15  2021 inventory.ini
[root@node-1 kubespray-2.15.0]# find inventory/mycluster
inventory/mycluster
inventory/mycluster/inventory.ini
inventory/mycluster/group_vars
inventory/mycluster/group_vars/k8s-cluster
inventory/mycluster/group_vars/k8s-cluster/k8s-net-macvlan.yml
inventory/mycluster/group_vars/k8s-cluster/k8s-net-kube-router.yml
inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
inventory/mycluster/group_vars/k8s-cluster/k8s-net-cilium.yml
inventory/mycluster/group_vars/k8s-cluster/k8s-net-calico.yml
inventory/mycluster/group_vars/k8s-cluster/k8s-net-weave.yml
inventory/mycluster/group_vars/k8s-cluster/k8s-net-flannel.yml
inventory/mycluster/group_vars/k8s-cluster/k8s-net-canal.yml
inventory/mycluster/group_vars/k8s-cluster/offline.yml
inventory/mycluster/group_vars/k8s-cluster/addons.yml
inventory/mycluster/group_vars/all
inventory/mycluster/group_vars/all/openstack.yml
inventory/mycluster/group_vars/all/azure.yml
inventory/mycluster/group_vars/all/vsphere.yml
inventory/mycluster/group_vars/all/coreos.yml
inventory/mycluster/group_vars/all/docker.yml
inventory/mycluster/group_vars/all/oci.yml
inventory/mycluster/group_vars/all/gcp.yml
inventory/mycluster/group_vars/all/all.yml
inventory/mycluster/group_vars/all/containerd.yml
inventory/mycluster/group_vars/all/aws.yml
inventory/mycluster/group_vars/etcd.yml

#由于kubespray给我们准备了py脚本,可以直接根据环境变量自动生成配置文件,所以我们现在只需要设定好环境变量就可以啦

# 使用真实的hostname(否则会自动把你的hostname改成node1/node2...这种哦)
[root@node-1 kubespray-2.15.0]# export USE_REAL_HOSTNAME=true
# 指定配置文件位置
[root@node-1 kubespray-2.15.0]# export CONFIG_FILE=inventory/mycluster/hosts.yaml
# 定义ip列表(你的服务器内网ip地址列表,3台及以上,前两台默认为master节点)
#这里使用的是内网IP
#学习作者的三个IP分别是:10.155.19.223 10.155.19.64 10.155.19.147
[root@node-1 kubespray-2.15.0]# declare -a IPS=(172.16.1.21 172.16.1.22 172.16.1.23)
# 生成配置文件			注意
[root@node-1 kubespray-2.15.0]# python3 contrib/inventory_builder/inventory.py ${IPS[@]}
DEBUG: Adding group all
DEBUG: Adding group kube-master
DEBUG: Adding group kube-node
DEBUG: Adding group etcd
DEBUG: Adding group k8s-cluster
DEBUG: Adding group calico-rr
DEBUG: adding host node-1 to group all
DEBUG: adding host node-2 to group all
DEBUG: adding host node-3 to group all
DEBUG: adding host node-1 to group etcd
DEBUG: adding host node-2 to group etcd
DEBUG: adding host node-3 to group etcd
DEBUG: adding host node-1 to group kube-master
DEBUG: adding host node-2 to group kube-master
DEBUG: adding host node-1 to group kube-node
DEBUG: adding host node-2 to group kube-node
DEBUG: adding host node-3 to group kube-node

个性化配置

#个性化配置

配置文件都生成好了,虽然可以直接用,但并不能完全满足大家的个性化需求,
比如用docker还是containerd?docker的工作目录是否用默认的/var/lib/docker?等等。
当然默认的情况kubespray还会到google
的官方仓库下载镜像、二进制文件,这个就需要你的服务器可以上外面的网,想上外网也需要修改一些配置。
--也可以手工修改一些网站和镜像仓库的地址,为国内的。难免有漏的,修改点可能会变,导致各种各样的坑,还是建议能上Google。

#看一下生成了哪些文件
[root@node-1 kubespray-2.15.0]# pwd
/root/kubespray-2.15.0
[root@node-1 kubespray-2.15.0]# tree inventory/mycluster/
inventory/mycluster/
+-- group_vars
¦   +-- all
¦   ¦   +-- all.yml
¦   ¦   +-- aws.yml
¦   ¦   +-- azure.yml
¦   ¦   +-- containerd.yml
¦   ¦   +-- coreos.yml
¦   ¦   +-- docker.yml
¦   ¦   +-- gcp.yml
¦   ¦   +-- oci.yml
¦   ¦   +-- openstack.yml
¦   ¦   +-- vsphere.yml
¦   +-- etcd.yml
¦   +-- k8s-cluster
¦       +-- addons.yml
¦       +-- k8s-cluster.yml
¦       +-- k8s-net-calico.yml
¦       +-- k8s-net-canal.yml
¦       +-- k8s-net-cilium.yml
¦       +-- k8s-net-flannel.yml
¦       +-- k8s-net-kube-router.yml
¦       +-- k8s-net-macvlan.yml
¦       +-- k8s-net-weave.yml
¦       +-- offline.yml
+-- hosts.yaml
+-- inventory.ini

# 定制化配置文件
# 1. 节点组织配置(这里可以调整每个节点的角色)			没配置,要核实正确性,比如多设置一个master节点等。
[root@node-1 kubespray-2.15.0]# vim inventory/mycluster/hosts.yaml
all:
  hosts:
	#根据主机名生成的每个节点信息
    node-1:
      ansible_host: 172.16.1.21
      ip: 172.16.1.21
      access_ip: 172.16.1.21
    node-2:
      ansible_host: 172.16.1.22
      ip: 172.16.1.22
      access_ip: 172.16.1.22
    node-3:
      ansible_host: 172.16.1.23
      ip: 172.16.1.23
      access_ip: 172.16.1.23
  children:#每个节点对应的角色
    kube-master:
	#K8S的master主节点
      hosts:
        node-1:
        node-2:
		#如果要加个主节点,那么这里配置上主机名即可,比如node-3
    kube-node:
	#K8S的worker工作节点
      hosts:
        node-1:
        node-2:
        node-3:
    etcd:
	#ETCD节点
      hosts:
        node-1:
        node-2:
        node-3:
    k8s-cluster:
      children:
        kube-master:
        kube-node:
    calico-rr:
      hosts: {}
# 2. 
#集群部署配置:containerd配置(教程使用containerd作为容器引擎)	没配置,可自定化配置。
[root@node-1 kubespray-2.15.0]# vim inventory/mycluster/group_vars/all/containerd.yml
# 3. 
#集群部署配置:全局配置(可以在这配置http(s)代理实现外网访问)。默认情况下kubespray会访问Google的官方仓库,二进制文件也是从Google下载的。
#还有一种方式是修改所有配置文件相关的网站和镜像仓库的地址,这样难免会有漏的,升级的话可能会有各种的坑。所以推荐上外网,更优雅一些。
#下述文件支持外网代理设置
[root@node-1 kubespray-2.15.0]# vim inventory/mycluster/group_vars/all/all.yml					这里一定要注意!!!!!!!
#这俩属性可以配置代理。																			这里改成了
http_proxy: "http://127.0.0.1:8118"		改成host映射名称
https_proxy: "http://127.0.0.1:8118"	改成host映射名称
后续要改成代理

--特殊的配置,在 https://git.imooc.com/coding-335/kubernetes-kubespray/src/v2.15.0/docs	中,暂时不讲。以后再讲解。

# 4. 

#k8s集群配置(包括设置容器运行时、svc网段、pod网段等)
[root@node-1 kubespray-2.15.0]# vim inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
#版本号不要修改。默认是经过测试的最好的版本。
kube_version: v1.19.7
#网络插件用默认的这个,性能好,使用广泛,注释还有别的
# Choose network plugin (cilium, calico, weave or flannel. Use cni for generic cni plugin)
kube_network_plugin: calico

#大部分集群规模一般就满足了,不要跟现有网段冲突,一定要确保内网环境并没有人使用这个网段才可以。
#service网段,service和pod网段一般分开				这个需要核实,不要跟现有内网网段冲突。
kube_service_addresses: 10.200.0.0/16				从kube_service_addresses: 10.233.0.0/18修改的。16位的掩码,这样集群规模满足大部分要求。
#pod网段,service和pod网段一般分开					这个需要核实,不要跟现有内网网段冲突。
kube_pods_subnet: 10.233.0.0/16						从kube_pods_subnet: 10.233.64.0/18修改。16位的掩码,这样集群规模满足大部分要求。
#apiserver的端口不用改
kube_apiserver_port: 6443
#dns默认
enable_nodelocaldns: true
#nodelocaldns的IP,默认值
nodelocaldns_ip: 169.254.25.10
#nodelocaldns的健康检查端口,默认值
nodelocaldns_health_port: 9254
# docker for docker, crio for cri-o and containerd for containerd.	三种容器运行时,这里选择
container_manager:(空格)containerd		#从container_manager: docker修改。

#其他不做任何的修改,保存

# 5. 

#修改etcd部署类型为host(默认是docker)
[root@node-1 kubespray-2.15.0]# vim ./inventory/mycluster/group_vars/etcd.yml
#etcd默认用docker来部署,但是集群这里不用docker而是用containerd的话,ETCD就没法部署了因为本机没有docker。所以这里用的host本机二进制方案部署
## Settings for etcd deployment type
etcd_deployment_type: host		#从etcd_deployment_type: docker修改。

# 6. 

#附加组件(ingress、dashboard等)
[root@node-1 kubespray-2.15.0]# vim ./inventory/mycluster/group_vars/k8s-cluster/addons.yml
#使用改为true,用不用都可以
ingress_nginx_enabled: true	#从ingress_nginx_enabled: false修改。
#做操作,看集群状态
dashboard_enabled: true		#从dashboard_enabled: true打开。
#其他的自定义修改.
#不需要的就不需要改别的.
7.自己新加,修改更多查看下述的4-6问题内容。kubespray用到kubeadm,并且token是24h过期的。
[root@node-1 kubespray-2.15.0]# vim roles/kubernetes/kubeadm/tasks/main.yml
command: "{{ bin_dir }}/kubeadm token create"
修改为:( 生成永不过期的token )
command: "{{ bin_dir }}/kubeadm token create --ttl 0"
#一键安装完验证
[root@node-1 kubespray-2.15.0]# kubeadm token list

标题:Kubernetes(四)kubespray方式(4.2)kubespray的安装、配置
作者:yazong
地址:https://blog.llyweb.com/articles/2022/10/31/1667148383122.html