李明
|
预先环境准备
系统类型IP地址节点角色CPUMemoryHostnameCentos7192.168.68.101master24Gserver01Centos7192.168.68.102worker12Gserver02Centos7192.168.68.103worker12Gserver03
#设置 PasswordAuthentication yesvi /etc/ssh/sshd_config sudo systemctl restart sshd
vi /lib/systemd/system/docker.service #找到ExecStart=xxx,在这行上面加入一行,内容如下:(k8s的网络需要)ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
systemctl daemon-reload service docker restart
image.png
系统设置(所有节点) 关闭、禁用防火墙(让所有机器之间都可以通过任意端口建立连接) systemctl stop firewalld systemctl disable firewalld#查看状态systemctl status firewalld
设置系统参数 - 允许路由转发,不对bridge的数据进行处理 #写入配置文件cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF #生效配置文件sysctl -p /etc/sysctl.d/k8s.conf
配置host文件 #配置host,使每个Node都可以通过名字解析到ip地址vi /etc/hosts#加入如下片段(ip地址和servername替换成自己的)192.168.68.101 server01 192.168.68.102 server02 192.168.68.103 server03
准备二进制文件(所有节点) kubernetes的安装有几种方式,不管是kube-admin还是社区贡献的部署方案都离不开这几种方式:
从上面的三种方式中其实使用镜像是比较优雅的方案,容器的好处自然不用多说。但从初学者的角度来说容器的方案会显得有些复杂,不那么纯粹,会有很多容器的配置文件以及关于类似二进制文件提供的服务如何在容器中提供的问题,容易跑偏。所以我们这里使用二进制的方式来部署。二进制文件已经这里备好,大家可以打包下载,把下载好的文件放到每个节点上,放在哪个目录随你喜欢, 放好后最好设置一下环境变量$PATH ,方便后面可以直接使用命令。(科学上网的老铁也可以自己去官网找找) [下载地址(kubernetes 1.9.0版本)] ( https://pan.baidu.com/s/1bMnqWY )
yum -y install lrzsz#选中文件上传就可以了,这次是在windows环境,上次基础搭建是在mac上rz
tar -xvf kubernetes-bins.tar.gz mv ~/kubernetes-bins/ bin
准备配置文件(所有节点) 上一步我们下载了kubernetes各个组件的二进制文件,这些可执行文件的运行也是需要添加很多参数的,包括有的还会依赖一些配置文件。现在我们就把运行它们需要的参数和配置文件都准备好。 下载配置文件 #安装gityum -y install git#到home目录下载项目git clone https://github.com/limingios/kubernetes-starter.git#看看git内容cd ~/kubernetes-starter && ll
文件说明
3台机器生成配置 这里会根据大家各自的环境生成kubernetes部署过程需要的配置文件。在每个节点上都生成一遍,把所有配置都生成好,后面会根据节点类型去使用相关的配置。 #cd到之前下载的git代码目录cd ~/kubernetes-starter#编辑属性配置(根据文件注释中的说明填写好每个key-value)vi config.properties#生成配置文件,确保执行过程没有异常信息 生成配置(所有节点)
#生成配置./gen-config.sh with-ca PS:这个截图master_ip应该是192.168.68.101 安装cfssl(所有节点)
#下载 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 \ https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64#修改为可执行权限chmod +x cfssl_linux-amd64 cfssljson_linux-amd64#移动到bin目录mv cfssl_linux-amd64 /usr/local/bin/cfssl mv cfssljson_linux-amd64 /usr/local/bin/cfssljson#验证cfssl version 生成根证书(主节点)
#所有证书相关的东西都放在这mkdir -p /etc/kubernetes/ca#准备生成证书的配置文件cp ~/kubernetes-starter/target/ca/ca-config.json /etc/kubernetes/ca cp ~/kubernetes-starter/target/ca/ca-csr.json /etc/kubernetes/ca#生成证书和秘钥cd /etc/kubernetes/ca cfssl gencert -initca ca-csr.json | cfssljson -bare ca#生成完成后会有以下文件(我们最终想要的就是ca-key.pem和ca.pem,一个秘钥,一个证书)ls 改造etcd(主节点) 准备证书
#etcd证书放在这mkdir -p /etc/kubernetes/ca/etcd#准备etcd证书配置cp ~/kubernetes-starter/target/ca/etcd/etcd-csr.json /etc/kubernetes/ca/etcd/ cd /etc/kubernetes/ca/etcd/#使用根证书(ca.pem)签发etcd证书cfssl gencert \ -ca=/etc/kubernetes/ca/ca.pem \ -ca-key=/etc/kubernetes/ca/ca-key.pem \ -config=/etc/kubernetes/ca/ca-config.json \ -profile=kubernetes etcd-csr.json | cfssljson -bare etcd#跟之前类似生成三个文件etcd.csr是个中间证书请求文件,我们最终要的是etcd-key.pem和etcd.pemls 更新etcd服务: cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/ mkdir -p /var/lib/etcd systemctl enable etcd.service systemctl daemon-reload service etcd start#验证etcd服务(endpoints自行替换)ETCDCTL_API=3 etcdctl \ --endpoints=https://192.168.68.101:2379 \ --cacert=/etc/kubernetes/ca/ca.pem \ --cert=/etc/kubernetes/ca/etcd/etcd.pem \ --key=/etc/kubernetes/ca/etcd/etcd-key.pem \ endpoint health api-server(主节点) 准备证书 #api-server证书放在这,api-server是核心,文件夹叫kubernetes吧,如果想叫apiserver也可以,不过相关的地方都需要修改哦mkdir -p /etc/kubernetes/ca/kubernetes#准备apiserver证书配置cp ~/kubernetes-starter/target/ca/kubernetes/kubernetes-csr.json /etc/kubernetes/ca/kubernetes/ cd /etc/kubernetes/ca/kubernetes/#使用根证书(ca.pem)签发kubernetes证书cfssl gencert \ -ca=/etc/kubernetes/ca/ca.pem \ -ca-key=/etc/kubernetes/ca/ca-key.pem \ -config=/etc/kubernetes/ca/ca-config.json \ -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes#跟之前类似生成三个文件kubernetes.csr是个中间证书请求文件,我们最终要的是kubernetes-key.pem和kubernetes.pemll api-server服务 生成token认证文件 #生成随机tokenhead -c 16 /dev/urandom | od -An -t x | tr -d ' ' 0b1bd95b94caa5534d1d4a7318d51b0e#按照固定格式写入token.csv,注意替换token内容echo "0b1bd95b94caa5534d1d4a7318d51b0e,kubelet-bootstrap,10001,\"system:kubelet-bootstrap\"" > /etc/kubernetes/ca/kubernetes/token.csv 更新api-server服务 cp ~/kubernetes-starter/target/master-node/kube-apiserver.service /lib/systemd/system/ systemctl daemon-reload service kube-apiserver start#检查日志journalctl -f -u kube-apiserver cat /lib/systemd/system/kube-apiserver.service controller-manager controller-manager一般与api-server在同一台机器上,所以可以使用非安全端口与api-server通讯,不需要生成证书和私钥。 controller-manager服务 更新controller-manager服务 cd ~/kubernetes-starter/ cp ~/kubernetes-starter/target/master-node/kube-controller-manager.service /lib/systemd/system/ systemctl daemon-reload service kube-controller-manager start#检查日志journalctl -f -u kube-controller-manager cat /lib/systemd/system/kube-controller-manager.service scheduler
scheduler服务 查看diff比较会发现两个文件并没有区别,不需要改造 cd ~/kubernetes-starter/ cp ~/kubernetes-starter/target/master-node/kube-scheduler.service /lib/systemd/system/ systemctl enable kube-scheduler.service 启动服务 service kube-scheduler start#检查日志journalctl -f -u kube-scheduler cat /lib/systemd/system/kube-scheduler.service PS:下次开始kubectl,calico,cni,kube-proxy,kube-dns的认证,授权。 |
2019-02-26 14:17:02