1 购买阿里云服务器

1.1 基础配置

在这里插入图片描述

  1. 使用抢占式收费便宜
  2. 2C4G就够了
  3. 3台实例
  4. 系统选择Ubuntu 16.04 64位,使用docker最好是4.4以上内核。

1.2 网络和安全组

在这里插入图片描述

  1. 按流量收费
  2. 宽带峰值设到100M

1.3 系统配置

在这里插入图片描述

  1. 选择自定义配置
  2. 设置登录密码

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

在这里插入图片描述
部署完成。

Logo

开源、云原生的融合云平台

更多推荐