【kubeadm】快速理解并且在虚拟机上快速部署k8s集群,包括dashboard界面,版本最新 Kubernetes v1.20.0
服务器说明系统类型IP地址节点角色Hostnamecentos-7.3192.168.60.2mastermastercentos-7.3192.168.60.3workernode1centos-7.3192.168.60.4workerNode2操作每一台机器初始化Centos环境yum update # 更新Centos环境yum install -y conntrack ipvsadm i
服务器说明
系统类型 | IP地址 | 节点角色 | Hostname |
---|---|---|---|
centos-7.3 | 192.168.60.2 | master | master |
centos-7.3 | 192.168.60.3 | worker | node1 |
centos-7.3 | 192.168.60.4 | worker | Node2 |
操作每一台机器
初始化Centos环境
yum update # 更新Centos环境
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp # 安装依赖包
yum install ntpdate -y && ntpdate time.windows.com # 时间同步
systemctl stop firewalld && systemctl disable firewalld # 关闭防火墙
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT # 重置iptables
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab # 关闭swap
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0 # 关闭selinux
service dnsmasq stop && systemctl disable dnsmasq # 关闭dnsmasq(否则可能导致docker容器无法解析域名)
设置域名映射
hostname # 查看主机名
hostnamectl set-hostname <your_hostname> # 修改主机名
vi /etc/hosts # 配置host,使所有节点之间可以通过hostname互相访问,将同一份host写到每台机器
192.168.60.2 master
192.168.60.3 node1
192.168.60.4 node2
如果需要在主机上用域名访问,则将该配置文件同样配置到主机上则可用 https://master:30000 访问 dashboard
系统参数设置
-
配置内核参数,将桥接的IPv4流量传递到iptables的链*
cat > /etc/sysctl.d/kubernetes.conf <<EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 vm.swappiness=0 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_watches=89100 EOF
-
生效文件
sudo modprobe br_netfilter sysctl -p /etc/sysctl.d/kubernetes.conf
安装Docker
-
清理系统中残留的Docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
-
安装依赖包
sudo yum install -y yum-utils
-
阿里云源(推荐)
sudo yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
官方源
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
-
安装Docker
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io
-
设置Dokcer开机启动并启动
sudo systemctl enable docker sudo systemctl start docker
安装Kubeadm
-
源代理
-
官方源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF
-
阿里云源(经常翻车)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
-
-
安装指定版本的管理工具(这里用的 1.20.0)
yum list kubelet --showduplicates | sort -r yum install -y kubelet-1.20.0-0.x86_64 kubeadm-1.20.0-0.x86_64 kubectl-1.20.0-0.x86_64 kubernetes-cni-0.8.7-0.x86_64 systemctl enable kubelet && systemctl start kubelet
-
部署CNI网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
操作Master节点
-
初始化 apiserver(用云服务器的同学们,跳过keepalived的部署)
kubeadm init --kubernetes-version=1.20.0 \ --apiserver-advertise-address=192.168.60.2 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
提示initialized successfully!表示初始化成功
输出
kubeadm join 192.168.60.5:6443 --token ...
该语句用来其它节点加入改master集群kubeadm join 192.168.60.5:6443 --token ppjplt.c34cbrw7q71ixfcl \ --discovery-token-ca-cert-hash sha256:ce9d46777bb3cadc8a55fb551cdfe4f0715358d7ad195a38cdb9fb828c708f39
to start using you 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 kubectl get nodes
-
发送admin.conf到所有节点(node),可以在任何一个节点管理集群
scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/admin.conf scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes/admin.conf ...
-
安装dashboard
在 dashboard 找到 recommended.yaml文件地址并下载
这里使用的文件 https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.5/aio/deploy/recommended.yaml
v2.1.0 跟 kubectl工具不兼容
没有外部提供负载均衡器 Load Balancer则需要将 dashboard 配置文件的 service修改成 NodePord向外暴露端口
kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort # nodeport方式暴露 ports: - port: 443 targetPort: 8443 nodePort: 30000 # #Node节点的端口,<nodeIP>:nodePort 是提供给集群外部客户访问service的入口 selector: k8s-app: kubernetes-dashboard
kubectl create -f recommended.yaml
-
查看服务运行情况
kubectl get deployment kubernetes-dashboard -n kubernetes-dashboard kubectl --namespace kubernetes-dashboard get pods -o wide kubectl get services kubernetes-dashboard -n kubernetes-dashboard netstat -ntlp|grep 30000 # 具体端口搜yaml文件里 3000开头的端口号
-
登陆dashboard
https://master:30000 #这是选择token方式登录,下面获取token kubectl create serviceaccount dashboard-admin -n kube-system kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}') #以上命令解释:创建admin账号,授权管理集群,复制控制台最后输出的token用于登录即可 #如果忘记token,使用以下命令获取 kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
-
推荐使用firefox浏览器,其他浏览器可能会因为证书问题无法访问
-
如果Chrome证书错误无法访问可以在任意空白处输入
thisisunsafe
,跳过证书认证
-
操作Worker节点
-
将Master节点配置分发到各个Worker节点
#在node节点上加入环境变量 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile source /etc/profile #执行完成以后可以在任意node节点上管理集群,查看节点是否正常 kubectl get nodes
-
部署CNI网络插件(如果之前已经配置过则不需要执行)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
-
加入到Master节点
kubeadm join master:6443 --token ppjplt.c34cbrw7q71ixfcl \ --discovery-token-ca-cert-hash sha256:ce9d46777bb3cadc8a55fb551cdfe4f0715358d7ad195a38cdb9fb828c708f39
如果 token过期或者遗忘
-
kubeadm token list
-
重新生成 token
kubeadm token create
-
获取 ca 证书的 hash 值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ``'s/^.* //'
其它
- 设置固定机器IP
- 关于 NodePort 开启的dashboard,可以参考 bare-metal裸机设置,默认的NodePort需要必须通过域名/ip+端口来访问,但是如果使用外部LoadBalanced则可以不需要加端口号
有什么疑问可以再评论下方回复,在线回复
更多推荐
所有评论(0)