k8s部署单控制平面集群(一)

部署单控制平面集群

1. 基础环境准备

   1.1 硬件准备

   1.2 系统环境配置

   1.3 Docker环境准备

   1.4 kubeadm环境准备

2.创建单控制平面集群 

   2.1 初始化集群

   2.2 kubectl配置文件

   2.3 kubectl参数自动补全

   2.4 Kubernetes网络

   2.5 Nodes资源管理

     2.5.1 添加Node节点

     2.5.2 删除Node节点

   3. 验证

1. 基础环境准备

1.1 硬件准备

机器配置:2核CPU,4G内存,40G系统盘

系统:Ubuntu 16.04.6 LTS

机器数量:3台 (master01 node01 node02)

1.2 系统环境配置

修改配置静态hostname

hostnamectl set-hostname master01

修改hosts表,集群所有节点保持文件内容一致

#Kubernetes
172.31.53.87    master01
172.31.53.88    node01
172.31.53.86    node02

配置服务器时间统一

关闭firewalld

ufw disable

关闭SELinux

ubuntu默认关闭SELinux

关闭swap

 # 临时关闭
    swapoff -a
 # 永久关闭
    注释掉/etc/fstab下的swap一行

开启参数自动补全,取消bash-completion注释

vim /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

1.3 Docker环境准备

更新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

解决问题:WARNING: No swap limit support(操作系统下docker不支持内存限制的警告),基于RPM的系统上不会发生此警告,该系统默认情况下启用这些功能。解决方法:vim /etc/default/grub 添加或编辑GRUB_CMDLINE_LINUX行以添加这两个键值对"cgroup_enable=memory swapaccount=1",例子:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1 net.ifnames=0 vga=792 console=tty0 console=ttyS0,115200n8 noibrs"

执行命令更新grub并重启机器

update-grub && reboot

docker 在 1.13 版本之后,将系统iptables 中 FORWARD 链的默认策略设置为 DROP,并为连接到 docker0 网桥的容器添加了ACCEPT规则,临时解决办法:

iptables -P FORWARD ACCEPT

永久解决办法:

vim /lib/systemd/system/docker.service
# 在[Service]下添加:
    ExecStartPost=/sbin/iptables -P FORWARD ACCEPT
systemctl daemon-reload && systemctl restart docker.service

设置daemon.json

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://x868aafl.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
systemctl daemon-reload && systemctl restart docker.service

1.4 kubeadm环境准备

配置apt库,安装kubeadm、kubelet、kubectl

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 <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

开启iptables bridege

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

2.创建单控制平面集群

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的参数自动补全

# 查看completion帮助
kubeadm completion -h
# 配置自动补全
source <(kubeadm completion bash)
echo "source <(kubeadm completion bash)" >> ~/.bashrc
source ~/.bashrc 

生成配置文件

kubeadm config print init-defaults >  init-defaults.yaml
vim init-defaults.yaml修改:
    clusterName:kubernetes  
    advertiseAddress: 172.24.51.176
    imageRepository: registry.aliyuncs.com/google_containers

执行初始化操作

kubeadm init --config init-defaults.yaml
或者
kubeadm init --apiserver-advertise-address=172.24.51.176 --image-repository=registry.aliyuncs.com/google_containers
# 执行完初始化保存最后输出的结果到文件:管理用户配置、部署网络、添加节点相关信息.如果在初始化集群的时候出现报错,请执行   kubeadm reset  命令执行重置,解决提示的报错后在执行初始化操作。

2.2 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

2.3 kubectl参数自动补全

查看completion帮助

kubectl completion -h
kubectl自动补全添加到当前shell
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc 

2.4 Kubernetes网络

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

2.5 Nodes资源管理

2.5.1 添加Node节点

# 创建token (Master01节点执行)
kubeadm token create
# 永久token
kubeadm token create --ttl 0
# 查看token (Master01节点执行)
kubeadm token list
# 获取discovery-token-ca-cert-hash值(Master01节点执行)
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'
# 添加work节点到kubernetes集群(work node节点执行)
kubeadm join <api-server-ip:port> --token <toke> --discovery-token-ca-cert-hash sha256:<discovery-token-ca-cert-hash>

2.5.2 删除Node节点

# 删除节点
kubectl delete nodes <node_name>
# ssh到<node_name>执行清理残留操作
kubeadm reset
# 删除/etc/kubernetes目录
rm -rf /etc/kubernetes/
# 清理Iptables
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
或者
# 清理IPVS
ipvsadm -C

3. 验证

# 检查组件状态是否正常
kubectl get componentstatuses   
# 查看集群系统信息
kubectl cluster-info
# 查看核心组件是否运行正常(Running)
kubectl -n kube-system get pod
# 每次重启之后,删除非Up状态的容器
docker ps -a | grep -v Up | xargs docker rm -f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值