环境准备
-
关闭防火墙
systemctl stop firewalld systemctl disable firewalld
-
关闭selinux
sed -i 's/enforcing/disabled/g' /etc/selinux/config #永久 setenforce 0 #临时
-
关闭swap分区(K8s禁止虚拟内存以提高性能)
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久 swapoff -a #临时
-
在master添加hosts
cat >> /etc/hosts << EOF 192.168.172.131 k8smaster 192.168.172.132 k8snode EOF
-
设置网桥参数
cat> /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables =1 net.bridge.bridge-nf-call-iptables =1 EOF sysctl --system #生效
-
时间同步
# 添加wlnmp源 rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm # 安装ntp服务 # yum install ntpdate -y yum install -y wntp # 查看和ntp server的时间差异 ntpdate -d cn.pool.ntp.org # 时间同步 ntpdate cn.pool.ntp.org ntpdate time.windows.com
安装步骤
所有服务器节点都需要安装
Docker
\kubeadmn
\kubelet
\kubectl
Kubernetes默认容器运行环境是Dockers, 因此需要首先安装Docker
-
安装Docker
-
更新docker 的yum源
yum install -y wget wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
-
安装指定版本的docker
yum install docker-ce-19.03.13 -y
-
配置加速器加速下载
cat > /etc/docker/daemon.json << EOF { "registry-mirrors": [ "https://gg3gwnry.mirror.aliyuncs.com", "https://registry.docker-cn.com" ] } EOF systemctl enable docker.service systemctl start docker
-
-
安装
kubeadm
\kubelet
\kubectl
-
添加k8s的阿里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
\kubectl
yum install -y kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 systemctl enable kubelet.service
-
查看是否安装成功
yum list installed | grep kubelet yum list installed | grep kubeadm yum list installed | grep kubectl
-
查看安装的版本
kubelet --version
-
命令说明
- Kubelet: 运行在cluster所有节点上,负责启动pod和容器
- Kubeadm: 用于初始化cluster
- Kubectl: kubenetes的命令行工具,通过该工具部署和管理应用;查看各种资源;创建、删除和更新组件
-
-
部署Kubernetes Master节点
-
初始化
kubeadm init \ --apiserver-advertise-address=192.168.172.131 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.19.4 \ --service-cidr-10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
说明
- apiserver-advertise-address:Mater节点通知地址
- image-repository: 镜像地址,默认链接谷歌
- kubernetes-version:k8s版本
- service-cider:功能未知,内部通信使用
- pod-network-cidr:功能未知,内部通信使用
service-cider
地址选取不能和pod-network-cidr
及本机网络又重叠或冲突,一般可选择一个本机网络和pod-network-cidr
都没有用到的私有网段地址 -
执行规则
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
-
将Node节点加入Master中
在Node节点执行master初始化时给出的命令
kubeadm join 192.168.172.131:6443 \ --token ***************** \ --discovery-token-ca-cert-hash sha246:*************************
-
建立Master - Node通信
-
下载
kube-flannel.yml
文件wget https://raw.githubusercontentent.com/coreos/flannel/master/Documentation/kube-flannel.yml yum install -y lrzsz # 可选:安装远程上传下载工具
-
应用
kube-flannel.yml
文件到运行时容器kubectl apply -f kube-flannel.yml
-
查看运行时容器pod
kubectl get pods -n kube-system
- 查看节点状态
kubectl get nodes
-
Kubernetes部署'容器化应用'
-
在集群中部署一个Nginx
kubectl create deployment nginx --image=nginx:latest kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc
访问地址:
http://NodeIP:Port
-
在集群中部署一个Tomcat
kubectl create deployment tomcat --image=tomcat:latest kubectl expose deployment tomcat --port=8080 --type=NodePort
访问地址:
http://NodeIP:Port
-
在集群中部署SpringBoot应用
-
项目打包(jar, war)==> 工具:git、maven、jenkins
-
制作Dockerfile文件,生成镜像
-
kubectl create deployment <容器名> --image=<镜像名称>
-
应用部署成功,以docker容器的方式在pod运行
-
自定义JDK镜像
FROM centos:latest MAINTAINER SPARON ADD jdk-8u251-linux-x64.tar.gz /usr/local/java ENV JAVA_HOME /usr/local/java/jdk1.8.0.251 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $PATH:$JAVA_HOME/bin CMD java -version
-
构建镜像
docker build -t <镜像名> .
-
通过镜像创建容器并运行
docker run -d [--name <容器名> ...] <镜像名|镜像ID>
-
空运行测试
kubectl create deployment <容器名> --image=<镜像名> [--dry-run -o yaml > deploy.yaml]
-
Yml 文件方式部署
kubectl apply -f deploy.yaml kubectl get pods
deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: <容器名> name: <容器名> spec: replicas: 1 selector: matchLabels: app: <容器名> strategy: {} template: metadata: creationTimestamp: null labels: app: <容器名> spec: containers: - image: <镜像名> name: <镜像名> imagePullPolicy: Never # 不从远程拉取 resources: {} status: {}
-
暴露服务端口
kubectl expose deployment <容器名> --port=<端口号> --type=NodePort
-
-
部署的一些常用命令
kubectl get node[s] kubectl get service[s] kubectl get deploy[ment] kubectl get pod[s] kubectl delete service[s] <name> kubectl delete deploy[ment] <name> kubectl delete pod[s] <name> kubectl describe pod[s] <name> # 查看pod详细信息
部署Kubernetes Dashboard
项目地址:https://github.com/kubernetes/dashboard
-
安装
wget https://raw/githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml kubectl apply -f recommended.yaml // kubectl apply -f https://raw/githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
-
修改yaml文件
-
获取token,Dashboard需要用到
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}')
部署Ingress
-
官网: https://kubernetes.github.io/ingress-nginx
-
安装
kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/baremetal/deploy.yaml
-
修改
yaml
配置文件333
行为阿里云镜像源 -
修改
322
行,hostNetwork: true
, 支持域名跳转 -
应用
kubectl apply -f deploy.yaml
-
查看应用状态
kubectl get pods -n ingress-nginx
-
配置Ingress规则
apiVersion:networking.k8s.io/vi kind: Ingress metadata: name: k8s-ingress # 规则名,不能重复 spec: rules: - host: www.cloud.com http: paths: - pathType: Prefix path: / backend: service: name: nginx # service name port: number: 80
kubectl delete -A ValidatingWebhookConfiguragtion ingress-nginx-admin kubectl get ing[ress] # 查询规则