kubeadm安装k8s
Kubernetes
基本环境配置
官网文档 入门 | Kubernetes
官方二进制安装
https://github.com/kubernetes/kubernetes/releases/
主机改名
hostnamectl set-hostname
/etc/hostname
设置域名解析
192.168.1.88 master
192.168.1.250 node1
192.168.1.251 node2
关闭防火墙
同步时间
yum -y install ntp ntpdate
ntpdate 0.asia.pool.ntp.org #这里主要就是通过时间服务器对系统时间进行同步,所以0.asia.pool.ntp.org并不是固定的,大家可以选择time.nist.gov、time.nuri.net、0.asia.pool.ntp.org、1.asia.pool.ntp.org、2.asia.pool.ntp.org、3.asia.pool.ntp.org中任意一个,只要保证可用就OK。
将系统时间写入硬件时间
hwclock --systohc
timedatectl
设置定时同步时间 crontab -e */5 * * * * ntpdate time2.aliyun.com ntpdate time2.aliyun.com这个是同步阿里云的时间
升级内核到最新版
#导入ELRepo仓库的公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#为yum安装ELRepo仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#查看可用版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装最新内核
yum --enablerepo=elrepo-kernel install kernel-ml
# 查看当前可用内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
根据计算机的实际响应,查看最新内核前的序号,然后执行命令grub2-set-default ${序号} ,例如:grub2-set-default 0
选好后重启
升级完成,可以通过uname -r命令进项验证。
grubby --default-kernel #查看内核
关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
安装Docker
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r #查看docker版本
yum -y install docker-ce-20.10.12-3.el7 #选择安装版本
#阿里云镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hf293614.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
kubeadm安装
安装kubeadm和kubelet
添加阿里云yum软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm和kubelet
yum install -y kubelet-1.21.3 kubeadm-1.21.3
systemctl enable kubelet
初始化主节点
部署kubernetes master
kubeadm init \
--apiserver-advertise-address=192.168.1.88 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
根据提示输入
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
令牌
kubeadm join 192.168.1.88:6443 --token uy3hp0.11ibijfjae59phcg \
--discovery-token-ca-cert-hash sha256:5d4f3ad608159b3e37fa48caad1053e7145764a0bee01880320da81320c7d73b
kubectl get nodes #查看节点
部署容器网络
wget https://docs.projectcalico.org/manifests/calico.yaml
#下载完后,需要修改字段CALICO_IPV4POOL_CIDR,与前面kubeadm init命令中的 --pod-network-cidr参数一样。
#修改完后文件后,输入命令kubectl apply -f calico.yaml执行部署容器网络。稍等几分钟,然后执行kubectl get pods -n kube-system查看部署进度。等Calico Pod都Running,节点也会准备就绪。
vim calico.yaml
10.244.0.0/16 #这里与上面一致
kubectl apply -f calico.yaml #执行部署容器网络,等待几分钟后执行下面命令
kubectl get pods -n kube-system
node节点加入集群
token有效期为24小时
kubeadm token create --print-join-command
#当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:
测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
#kubectl 公开部署nginx 端口80 类型及节点端口
kubectl get pod,svc
等待几分钟,测试任意Node的IP
部署dashboard
Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
#如果报错无法连接,就https://site.ip138.com/查一下raw.githubusercontent.com的ip,把查到的ip加进去
vim /etc/hosts
185.199.108.133 raw.githubusercontent.com
默认Dashboard只能集群内部访问,您可以运行命令vi recommended.yaml修改Service类型为NodePort,方便集群外的机器访问。
vim recommended.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30443
selector:
k8s-app: kubernetes-dashboard
type: NodePort
#nodePort: 30443这个是自定义端口
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
kubectl get svc -A |grep kubernetes-dashboard #查看
访问地址:https://<任意Node的IP>:30443,将上条命令产生的token复制后填入,进行登录。注意:是https://
待所有pod处于running的状态后,创建service account并绑定默认cluster-admin管理员集群角色:# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
获得Token后输入里面
Type: kubernetes.io/service-account-token
Data
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6InhCRWV6bWFlcVZqZ2tZTnJORVRDZUx6UWtvOUxrWXltVDduTDRzdDhjOEEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4teHhrODUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZTk0NTM5MmItNDU0OS00YjVhLWIzNjUtNTc1YjIyN2Q1MWNmIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.fQf4-y8N5osjR7IEX1FSXU8FxtVxtRjGnIkt6tB3R47UisV0WaZ1_FsfXfpghpoQ3Zfjz-sK0kCl4xVzrB5IdojSIreKK4V3eafe3gaagkeRR915oAtYNHlB3Fif0QGnspOW4kkDtDTaOYKwLT3o-xbhb2TxGu7vdyqEq-SxIodiA7wsWAzugkfilEz-748txR7WRNi8C6IvCeTSGQZ22BW0d2I-ALZNGAOJxDAzHVXFNtGFPPJKRTtHS_PEGoHaNDKzQn4Vvl6BaLW4vtO25F2Y6QxRgx1R66vJQzh_Tslf3ZWaxPgU2OF8ujEDd1QkTkrcl5hScj6kMS9hL3-VcQ
ps: kubernetes集群重新初始化
1、移除所有工作节点
kubectl delete node node1
kubectl delete node node2
2、所有工作节点删除工作目录,并重置kubeadm
rm -rf /etc/kubernetes/*
kubeadm reset
3、Master节点删除工作目录,并重置kubeadm
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f
4、重新init kubernetes