一、安装k8s
1.1、安装环境
docker v19.03.15
Centos 8 安装docker_centos8安装docker_一般等价物(污妖王)的博客
节点 | IP | 主机名 |
master | 192.168.110.251 | test251 |
node1 | 192.168.110.252 | test252 |
node2 | 192.168.110.253 | test253 |
-------------------- 以下步骤所有机器都要执行↓
1.2、设置hosts
vim /etc/hosts
1.3、开放端口
云服务器部署需要开放以下端口(测试环境如无安全限制,可忽略)
master节点:TCP端口:6443,2379,2380,60080,60081
UDP端口全开
node节点 :UDP端口全开
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
firewall-cmd --zone=public --add-port=60080/tcp --permanent
firewall-cmd --zone=public --add-port=60081/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
firewall-cmd --reload
1.4、安装依赖环境
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstatlibseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-utils unzip bind-utils gcc
1.5、防火墙配置(生产环境建议别玩)
# 关闭防火墙(生产环境建议使用放行端口)
systemctl stop firewalld && systemctl disable firewalld
# 置空iptables (生产环境别执行)
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
1.6、关闭selinux[必须操作]
# 关闭swap分区【虚拟内存】并且永久关闭虚拟内存
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
1.7、调整内核参数
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
#将优化内核文件拷贝到/etc/sysctl.d/文件夹下,这样优化文件开机的时候能够被调用
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
#手动刷新,让优化文件立即生效
sysctl -p /etc/sysctl.d/kubernetes.conf
1.8、调整系统临时区
#设置系统时区为中国/上海
timedatectl set-timezone "Asia/Shanghai"
#将当前的UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
#重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
1.9、关闭系统不需要的服务(生产环境别玩)
systemctl stop postfix && systemctl disable postfix
1.10、设置日志保存方式
# 创建保存日志的目录
mkdir /var/log/journal
# 创建配置文件存放目录
mkdir /etc/systemd/journald.conf.d
# 创建配置文件
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=10G
SystemMaxFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog=no
EOF
# 重启systemd journald 的配置
systemctl restart systemd-journald
1.11、打开文件数调整(可不执行)
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
1.12、kube-proxy 开启 ipvs 前置条件
modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 使用lsmod命令查看这些文件是否被引导
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
1.13、kubeadm安装k8s
# 国内镜像配置(国内建议配置)
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
1.14、安装kubeadm、kubelet、kubectl
# 查看kubeadm可用版本
yum list -y kubeadm --showduplicates|grep 1.19
# 安装1.19.16版本
yum install -y kubeadm-1.19.16-0 kubectl-1.19.16-0 kubelet-1.19.16-0
# 如果安装报错,卸载后重装
yum remove -y kubelet kubeadm kubectl
# kubelet开机启动
systemctl enable kubelet && systemctl start kubelet
-------------------- 以上步骤所有机器都要执行↑
二、初始化master节点
我将配置文件放在 /data/k8s文件夹中,所以先创建文件夹
# 创建
mkdir /data/k8s -p
cd /data/k8s
2.1 方式一
2.1.1 修改配置文件
kubeadm config print init-defaults > kubeadm-init.yaml
A、将advertiseAddress: 1.2.3.4
修改为本机地址,我这里是
advertiseAddress:
192.168.110.251
B、将imageRepository: k8s.gcr.io
修改为
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
C、新增pod子网络
podSubnet: 10.244.0.0/16
修改后配置文件如下图
2.1.2、根据配置文件拉取镜像
kubeadm config images pull --config kubeadm-init.yaml
2.1.3、执行初始化
kubeadm init --config kubeadm-init.yaml
2.2 方式二
# 直接执行脚本,效果同2.1到2.3
kubeadm init \
--apiserver-advertise-address=192.168.110.251 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.16 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--service-dns-domain=cluster.local \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=NumCPU
出现下面的信息表示安装成功
2.3、配置kubectl执行命令环境
# 配置kubectl执行命令环境
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
2.4、 启用 kubectl 命令自动补全功能
# 启用 kubectl 命令自动补全功能
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
2.5、配置网络
方式一:Calico
# 下载Calico配置文件
wget https://docs.projectcalico.org/v3.20/manifests/calico.yaml
# 编辑calico.yaml
vim calico.yaml
搜索关键字CLUSTER_TYPE,在它下面增加网卡配置
# IP automatic detection
- name: IP_AUTODETECTION_METHOD
value: "interface=en.*"
构建Calico网络
kubectl apply -f calico.yaml
然后等。。。。
用 kubectl get po -n kube-system 查看状态
kubectl get po -n kube-system
状态都是Running,表示安装成功
方式二:Flannel
下载Flannel源码zip包,我这里是0.19.2版本
Release v0.19.2 · flannel-io/flannel · GitHub
解压
# 解压
unzip flannel-0.19.2.zip
# 进入文件夹
cd ./flannel-0.19.2/Documentation
# 修改配置文件kube-flannel.yml
vim kube-flannel.yml
NetWork改成和脚本中pod-network-cidr一致
添加一行宿主机网卡名称,我的是ens33
执行安装
# 安装flannel
kubectl create -f ./kube-flannel.yml
2.6 其他node节点加入集群(不是master节点)
# 这是2.3里面的代码,根据自己情况复制粘贴,这个是我的
kubeadm join 192.168.110.251:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:5150588f09a9f1c8538cc67262a1f788fd0b6c0073c7c9357c467312b2a1f69b
PS:如果上面的代码忘了
# 先执行
kubeadm token list
1、如果有数据
# 如果有结果,则执行
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 将看到的sha256带入命令
kubeadm join 192.168.110.251:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:<看到的sha256>
2、如果没有数据
# 重新生成一个
kubeadm token create --print-join-command
然后每个节点重新执行一次
查看加入状态
kubectl get node
三、 安装Dashboard(v2.0.5)
3.1 安装Dashboard
# 下载配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.5/aio/deploy/recommended.yaml
添加暴露端口
修改好的yaml文件https://pan.baidu.com/s/1sd_1GYiQWcXbiWPpu13uZA?pwd=6666
如果1.5没有清空iptables,需要做如下配置(所有服务器都要执行)
# 如果1.5没有置空iptables,需要设置
iptables-save > iptables.rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
安装dashboard
# 执行安装
kubectl apply -f recommended.yaml
# 查看安装情况
kubectl get po,svc -n kubernetes-dashboard
3.2、添加管理员账户
创建dashboard-admin.yaml
cat > dashboard-admin.yaml << EOF
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: admin
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: admin
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
EOF
创建登录用户
kubectl apply -f dashboard-admin.yaml
查看创建的用户
kubectl -n kube-system get secret|grep admin-token
查看token
# 查看所有信息
kubectl -n kube-system describe secret admin-token-jjhbw
# 直接查看token
kubectl -n kube-system get secret admin-token-jjhbw -o jsonpath={.data.token}|base64 -d
Over