生成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