1. 部署单控制平面集群
1. 1 基础环境准备
1.1.1 硬件准备
机器配置:2核CPU,4G内存,40G系统盘
系统:Ubuntu 16.04.6 LTS
机器数量:3台 (master01 node01 node02)
1.1.2 系统环境配置
修改配置静态hostname
1 | hostnamectl set-hostname master01 |
修改hosts表,集群所有节点保持文件内容一致
1 | #Kubernetes |
配置服务器时间统一
关闭firewalld
1 | ufw disable |
关闭SELinux
1 | ubuntu默认关闭SELinux |
关闭swap
1 | # 临时关闭 |
开启参数自动补全,取消bash-completion注释
1 | vim /etc/bash.bashrc |
1.1.3 Docker环境准备
更新apt包索引
1 | apt-get update |
安装软件包以允许apt通过HTTPS使用存储库
1 | apt-get -y install \ |
添加Docker的官方GPG密钥
1 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - |
安装add-apt-repository工具
1 | apt-get -y install software-properties-common |
添加稳定的存储库
1 | add-apt-repository \ |
更新apt包索引
1 | apt-get update |
查看Docker版本
1 | apt-cache madison docker-ce |
安装docker-ce最新版本
1 | apt-get -y install docker-ce docker-ce-cli containerd.io |
解决问题:WARNING: No swap limit support(操作系统下docker不支持内存限制的警告),基于RPM的系统上不会发生此警告,该系统默认情况下启用这些功能。解决方法:vim /etc/default/grub 添加或编辑GRUB_CMDLINE_LINUX行以添加这两个键值对”cgroup_enable=memory swapaccount=1”,例子:
1 | GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1 net.ifnames=0 vga=792 console=tty0 console=ttyS0,115200n8 noibrs" |
执行命令更新grub并重启机器
1 | update-grub && reboot |
docker 在 1.13 版本之后,将系统iptables 中 FORWARD 链的默认策略设置为 DROP,并为连接到 docker0 网桥的容器添加了ACCEPT规则,临时解决办法:
1 | iptables -P FORWARD ACCEPT |
永久解决办法:
1 | vim /lib/systemd/system/docker.service |
设置daemon.json
1 | cat > /etc/docker/daemon.json <<EOF |
1.1.4 kubeadm环境准备
配置apt库,安装kubeadm、kubelet、kubectl
1 | apt-get update && apt-get install -y apt-transport-https |
开启这些设置使通过网桥的数据包由主机系统上的iptables规则处理,默认关闭,设置为1则开启
1 | cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf |
1.2 创建单控制平面集群
1.2.1 初始化集群
命令详解
kubeadm config upload from-file:由配置文件上传到集群中生成ConfigMap;
kubeadm config upload from-flags:由配置参数生成ConfigMap;
kubeadm config view:查看当前集群中的配置值;
kubeadm config print init-defaults:输出kubeadm init默认参数文件的内容;
kubeadm config print join-defaults:输出kubeadm join默认参数文件的内容;
kubeadm config migrate:在新旧版本之间进行配置转换;
kubeadm config images list:列出所需的镜像列表;
kubeadm config images pull:拉取镜像到本地;
配置kubeadm的参数自动补全
1 | # 查看completion帮助 |
生成配置文件
1 | kubeadm config print init-defaults > init-defaults.yaml |
执行初始化操作
1 | kubeadm init --config init-defaults.yaml |
或者
1 | kubeadm init --apiserver-advertise-address=172.24.51.176 --image-repository=registry.aliyuncs.com/google_containers |
1.2.2 kubectl配置文件
root用户
1 | echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc |
非root用户
1 | mkdir -p $HOME/.kube |
1.2.3 kubectl参数自动补全
查看completion帮助
1 | kubectl completion -h |
kubectl自动补全添加到当前shell
1 | source <(kubectl completion bash) |
1.2.4 Kubernetes网络
1 | kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml |
1.2.5 Nodes资源管理
1.2.5.1 添加Node节点
1 | # 创建token (Master01节点执行) |
1.2.5.2 删除Node节点
1 | # 删除节点 |
1.3 验证
1 | # 检查组件状态是否正常 |