使用阿里云快速搭建Kubernetes 1.18
1 购买阿里云服务器
1.1 基础配置
- 使用抢占式收费便宜
- 2C4G就够了
- 3台实例
- 系统选择Ubuntu 16.04 64位,使用docker最好是4.4以上内核。
1.2 网络和安全组
- 按流量收费
- 宽带峰值设到100M
1.3 系统配置
- 选择自定义配置
- 设置登录密码
1.4 确认订单即可
1.5 停机不收费
2 基础环境配置(root账户)
2.1 系统环境配置
2.1.1 修改hostname(三台)
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
验证是否修改成功
hostname
2.1.2 修改hosts配置(三台)
cat >> /etc/hosts << EOF
#Kubernetes
172.24.88.146 master01
172.24.88.148 node01
172.24.88.147 node02
EOF
验证是否修改成功
cat /etc/hosts
2.1.3 其他配置(阿里云默认关闭)
查看firewalld(默认关闭)
ufw status
查看SELinux(默认未安装)
getenforece
查看swap(默认关闭)
free
2.1.4 开启参数补全(三台)
vi /etc/bash.bashrc
取消注释
# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
启用配置
source /etc/bash.bashrc
2.2 Docker环境准备(三台)
2.2.1更新apt包索引
apt-get update
安装软件包以允许apt通过HTTPS使用存储库
apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
安装add-apt-repository工具
apt-get -y install software-properties-common
添加稳定的存储库
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
更新apt包索引
apt-get update
查看Docker版本
apt-cache madison docker-ce
安装docker-ce最新版本
apt-get -y install docker-ce docker-ce-cli containerd.io
docker info
如果安装比较慢,可以参考https://developer.aliyun.com/mirror/里Docker CE的安装方法
2.2.2 出现:WARNING: No swap limit support
vi /etc/default/grub
修改
vi /etc/default/grub
在GRUB_CMDLINE_LINUX增加cgroup_enable=memory swapaccount=1
GRUB_CMDLINE_LINUX=" cgroup_enable=memory swapaccount=1 vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs"
更新grub并重启机器
update-grub && reboot
2.2.3 docker 在 1.13 版本之后,将系统iptables 中 FORWARD 链的默认策略设置为 DROP,并为连接到 docker0 网桥的容器添加了ACCEPT规则,解决方法
vi /lib/systemd/system/docker.service
# 在[Service]下添加:
ExecStartPost=/sbin/iptables -P FORWARD ACCEPT
重启docker服务
systemctl daemon-reload && systemctl restart docker.service
如图所示:
2.2.4 配置daemon.json
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["<<填写自己的镜像加速地址>>"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
在阿里云查找自己的镜像加速地址:
修改docker cgroup driver为systemd
对于使用systemd作为init system的Linux的发行版,使用systemd作为docker的cgroup driver可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各个节点上docker的cgroup driver为systemd。
重启docker服务
systemctl daemon-reload && systemctl restart docker.service
2.2.5 开启iptables对Netfilter中数据包的支持
cat > /etc/sysctl.d/k8s.conf <<EOF
# support Netfilter
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
应用配置
sysctl --system
说明:
当开启时:sysctl -w net.bridge.bridge-nf-call-iptables=1
skb中存在physin和physout的接口信息,此时iptables规则可以使用-m physdev --physdev-in 和-m physdev --physdev-out去匹配物理接口。
PREROUTING-MANGLE-SSH-71: IN=br-lan0 OUT= PHY-m physdev --physdev-in=eth1
MAC=70:f1:a1:aa:bd:60:00:23💿9c:e7:0a:08:00 SRC=192.168.1.254 DST=192.168.1.130 LEN=92 TOS=0x00 PREC=0x00 TTL=64 ID=25901 DF PROTO=TCP SPT=55377 DPT=22 WINDOW=16395 RES=0x00 ACK PSH URGP=0
当关闭时:sysctl -w net.bridge.bridge-nf-call-iptables=0
skb中没有physin和physout的接口信息,此时iptables规则无法使用-m physdev --physdev-in 和-m physdev --physdev-out去匹配物理接口。
PREROUTING-MANGLE-SSH-71: IN=br-lan0 OUT= MAC=70:f1:a1:aa:bd:60:00:23💿9c:e7:0a:08:00 SRC=192.168.1.254 DST=192.168.1.130 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=26088 DF PROTO=TCP SPT=55757 DPT=22 WINDOW=8192 RES=0x00 SYN URGP=0
2.3 kubeadm安装
2.3.1 配置阿里云镜像库
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat >/etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
2.3.2 安装kubeadm、kubelet、kubectl
apt-get install -y kubelet kubeadm kubectl
3 创建K8S集群(root账户)
3.1 创建master节点
3.1.1 配置kubeadm的参数自动补全
配置kubeadm自动补全(阿里云Ubuntu 16.04默认已安装bash-completion)
source <(kubeadm completion bash)
echo "source <(kubeadm completion bash)" >> ~/.bashrc
source ~/.bashrc
3.1.2 生成配置文件
kubeadm config print init-defaults > init-master.yaml
vi init-master.yaml
修改:
clusterName: k8s-cluster
advertiseAddress: 阿里云主机的内网IP
imageRepository: registry.aliyuncs.com/google_containers
3.1.3 执行初始化操作
kubeadm init --config init-master.yaml
生成后复制最下面内容
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.24.88.146:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:8009eeba6c73ad14380d3bbaf81f407660e887a12eefc6bfae12c6138afacd3b
3.1.4 kubectl配置文件
root用户
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc
source /root/.bashrc
非root用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.1.5 kubectl参数自动补全
配置kubectl自动补全(阿里云Ubuntu 16.04默认已安装bash-completion)
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
3.1.6 Kubernetes网络
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
查看主节点是否为Ready状态
kubectl get nodes
3.2 创建node节点
使用上面保存的命令在node节点执行
kubeadm join 172.24.88.146:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:8009eeba6c73ad14380d3bbaf81f407660e887a12eefc6bfae12c6138afacd3b
查看节点是否为Ready状态
kubectl get nodes
部署完成。