kubernetes 1.18 在线集群部署
飞机票环境准备硬件准备系统环境准备1. 配置yum仓库,关闭firewalld、selinux、swap2.配置所有主机hosts3. 免密登陆4. NTP同步部署 k8s初始化 apiserver安装 docker-ce-18.09 、kubernetes1.18初始化master节点加入集群重新提取kubeadm join命令第二、三节点使用kubectl命令环境准备硬件准备hostnameI
·
飞机票
环境准备
硬件准备
hostname | IP | 角色 | 需求 |
---|---|---|---|
k8s1 | 192.168.2.161 | master - worker | 2C4G-100G |
k8s2 | 192.168.2.162 | master - worker | 2C4G-100G |
k8s3 | 192.168.2.163 | master - worker | 2C4G-100G |
apiserver.demo | 192.168.2.164 | apiserver - nginx - 负载均衡 | 2C4G-100G |
- 3台master - worker 虚机为: 互为master、worker。
- apiserver主机名一定要修改,否则后面脚本会出错。
- CentOS 7.8 … 7.9 实测无误。
- 如有内核需求请升完内核再部署集群,否则集群部署完成后在升级内核集群会崩溃。
系统环境准备
1. 配置yum仓库,关闭firewalld、selinux、swap
2. 配置所有主机hosts
[root@k8s1 ~]# cat /etc/hosts
192.168.2.161 k8s1
192.168.2.162 k8s2
192.168.2.163 k8s3
192.168.2.164 apiserver.demo
3. 免密登陆
所有主机互相做免密登陆
ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa -q
ssh-copy-id root@192.168.2.161
ssh-copy-id root@192.168.2.162
ssh-copy-id root@192.168.2.163
ssh-copy-id root@192.168.2.164
4. NTP同步
#同步阿里云ntp时间服务器
ntpdate ntp1.aliyun.com
部署 k8s
初始化 apiserver
- 在apiserver服务器执行
- 部署nginx实现 负载均衡及反向代理
- 此文为yum部署,也可源码部署。
#nginx 依赖
yum -y install gcc openssl pcre-devel
#nginx stream mod
yum -y install nginx nginx-mod-stream.x86_64
#开机自启nginx
systemctl enable nginx
#编辑nginx配置文件
vim /etc/nginx/nginx.conf
#在最后行添加
stream {
server {
listen 6443;
proxy_pass k8s_masters;
}
upstream k8s_masters {
server 192.168.2.161:6443;
server 192.168.2.162:6443;
server 192.168.2.163:6443;
#sticky_cookie_insert srv_id expires=1h domain=apiservice.demo path=/;
}
}
#重新启动nginx 以 加载配置
systemct restart nginx
安装 docker-ce-18.09 、kubernetes1.18
- 通过脚本安装docker-ce、kubernetes1.18 或 手动执行
- 在master、worker节点执行
vim install-k8s.sh
#!/bin/bash
# 卸载旧版本docker
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 设置 docker-ce yum 仓库
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装并启动 docker
yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
systemctl enable docker
systemctl start docker
# 安装 nfs-utils
yum install -y nfs-utils
# 修改 /etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p
# 配置k8s的阿里云yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 卸载旧版本
yum remove -y kubelet kubeadm kubectl
# 安装kubelet、kubeadm、kubectl
yum install -y kubelet-1.18.5 kubeadm-1.18.5 kubectl-1.18.5
# 修改docker Cgroup Driver为systemd
# # 将/usr/lib/systemd/system/docker.service文件中的这一行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# # 修改为 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
# 如果不修改,在添加 worker 节点时可能会碰到如下错误
# [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
# Please follow the guide at https://kubernetes.io/docs/setup/cri/
sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
# 设置 docker 镜像,提高 docker 镜像下载速度和稳定性
# 如果您访问 https://hub.docker.io 速度非常稳定,亦可以跳过这个步骤
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet
docker version
#赋予权限并执行脚本
chmod +x install-k8s.sh
./install-k8s.sh
初始化master节点
- 只在第一个master节点执行,本文中的192.168.2.161
#创建脚本
vim initialize-master.sh
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
#下面用的apiserver反向代理来定义apiserver.demo,之前hosts已手动添加,此步可忽略或执行都无错。
echo "192.168.2.164 ${APISERVER_NAME}" >> /etc/hosts
#!/bin/bash
# 脚本出错时终止执行
set -e
if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then
echo -e "\033[31;1m请确保您已经设置了环境变量 POD_SUBNET 和 APISERVER_NAME \033[0m"
echo 当前POD_SUBNET=$POD_SUBNET
echo 当前APISERVER_NAME=$APISERVER_NAME
exit 1
fi
# 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
rm -f ./kubeadm-config.yaml
cat <<EOF > ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.18.5
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "${APISERVER_NAME}:6443"
networking:
serviceSubnet: "10.96.0.0/16"
podSubnet: "${POD_SUBNET}"
dnsDomain: "cluster.local"
EOF
# kubeadm init
echo -e "\033[41;37m 根据您服务器网速的情况,您需要等候 3 - 10 分钟 \033[0m"
kubeadm init --config=kubeadm-config.yaml --upload-certs
# 配置 kubectl
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件
rm -f calico-3.9.2.yaml
wget https://kuboard.cn/install-script/calico/calico-3.9.2.yaml
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico-3.9.2.yaml
kubectl apply -f calico-3.9.2.yaml
#赋予权限并执行脚本
chmod +x initialize-master.sh
./initialize-master.sh
- 在执行完毕后的输出中提取kubeadm join 命令 (2小时内有效)
- 检查节点初始化
kubectl get node
加入集群
- 在k8s2、k8s3节点执行此第一master输出的join命令加入k8s集群
#例如:
kubeadm join apiserver.demo:6443 --token iqo9pi.ajzg47smhqmzw81t \
--discovery-token-ca-cert-hash sha256:54a722e5aacdb6cbe2da2cab490ef51031fbd49a403414a52449eb751645be13 \
--control-plane --certificate-key b557f4a9edab940c025dc81750125b5a260ef1df9320430d123ce9b9fe42db8a
- 在第一master查看状态
kubectl get pods -n kube-system
kubectl get nodes
重新提取kubeadm join命令
- 在第一master执行:
kubeadm token create --print-join-command
获得sha256
kubeadm init phase upload-certs --upload-certs
获得key - 添加
--control-plane --certificate-key
已获得完整join命令
kubeadm join apiserver.demo:6443 --token iqo9pi.ajzg47smhqmzw81t \
–discovery-token-ca-cert-hash sha256:54a722e5aacdb6cbe2da2cab490ef51031fbd49a403414a52449eb751645be13 \
–control-plane --certificate-key b557f4a9edab940c025dc81750125b5a260ef1df9320430d123ce9b9fe42db8a
第二、三节点使用kubectl命令
- 拷贝第一master admin.conf
scp -r /etc/kubernetes/admin.conf root@k8s2:/etc/kubernetes/admin.conf
- 刷新k8s2配置
echo export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile
source ~/.bash_profile
#使用kubectl 命令
kubectl get nodes
更多推荐
已为社区贡献2条内容
所有评论(0)