主机名 | IP |
---|---|
master | 10.0.0.11 |
node1 | 10.0.0.12 |
node2 | 10.0.0.13 |
一、环境准备(三台主机都执行)
1)关闭防火墙和selinux、swap分区(k8s禁止虚拟内存以提高性能)
# 01.关闭防火墙 和 开机自启
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
# 02.关闭selinux 和 开机自启
[root@localhost ~]# setenforce 0 && sed -i 's#enforcing#disabled#g' /etc/selinux/config
# 03.关闭swap 和 开机自启
[root@localhost ~]# swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
2)修改主机名并设置host解析
# 01.修改主机名
[root@localhost ~]# hostnamectl set-hostname 主机名
# 02.设置host解析
[root@localhost ~]# cat >> /etc/hosts << EOF
10.0.0.11 master
10.0.0.12 node1
10.0.0.13 node2
EOF
3)下载docker、kubernetes的yum源
# 01.阿里云docker源
[root@localhost ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 02.阿里云kubernetes源
[root@localhost ~]# 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
4)安装docker、kubernetes服务
[root@localhost ~]# yum install -y docker kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
5)检查安装完的版本
[root@localhost ~]# rpm -qa docker kubelet kubeadm kubectl
kubeadm-1.23.0-0.x86_64
docker-1.13.1-209.git7d71120.el7.centos.x86_64
kubectl-1.23.0-0.x86_64
kubelet-1.23.0-0.x86_64
6)将桥接的IPv4流量传递到iptables的链(可选)
[root@localhost ~]# cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
7)docker配置镜像加速
# docker镜像加速地址,可去阿里云免费申请
[root@localhost ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}
EOF
8)启动服务 && 开机自启
# docker服务
[root@localhost ~]# systemctl start docker && systemctl enable docker
# k8s服务初始化后在开启,要不然启动可能会出错
9)时间同步
# 01.安装时间同步服务
[root@localhost ~]# yum install ntpdate -y
# 02.设置时间同步服务器 - 阿里云
[root@localhost ~]# ntpdate ntp.aliyun.com
二、软件配置
1)kubernetes-master初始化
[root@master ~]# kubeadm init \
--apiserver-advertise-address=10.0.0.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
参数解析:
apiserver-advertise-address API 服务器所在的地址,这里就是master节点的IP
image-repository 配置拉取k8s镜像的容器仓库,我们配置的是阿里的一个镜像仓库
kubernetes-version 指定k8s的版本。
service-cidr 服务的虚拟 IP 地址另外指定 IP 地址段
pod-network-cidr pod节点网络可以使用的 IP 地址段
2)环境变量设置
# 01.如果您是root用户,则可以运行:
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
# 如果您是普通用户身份,则运行以下命令:
mkdir-p$HOME/.kube
sudo cp-i/etc/kubernetes/admin.conf$HOME/.kube/config
sudo chown$(id-u):$(id-g)$HOME/.kube/config
# 02.开启服务 && 开机自启
[root@master ~]# systemctl start kubelet && systemctl enable kubelet
3)生成Token和hash
[root@master ~]# kubeadm token create --print-join-command
kubeadm join 10.0.0.11:6443 --token nqoz33.btbpzptta949usvf --discovery-token-ca-cert-hash sha256:080a73873e311663b7058d70b648d34db601febc9cdecf9e18c54343df7e7c3b
4)node节点加入master
# 复制master生成的token,在node节点执行
[root@node1 ~]# kubeadm join 10.0.0.11:6443 --token nqoz33.btbpzptta949usvf --discovery-token-ca-cert-hash sha256:080a73873e311663b7058d70b648d34db601febc9cdecf9e18c54343df7e7c3b
5)master查看已加入的node节点列表
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady control-plane,master 24h v1.23.0
node1 NotReady <none> 14s v1.23.0
node2 NotReady <none> 14s v1.23.0
6)部署 CNI 网络插件
node节点加入了集群后的状态为 NoReady,无法跨主机通信;
CNI 网络插件主要功能:实现 pod 资源能够跨宿主机进行通信;
# 01.下载CNI配置文件
[root@master ~]# wget https://docs.projectcalico.org/v3.25/manifests/calico.yaml --no-check-certificate
# 02.部署 CNI
[root@master ~]# kubectl apply -f calico.yaml
# 03.查看运行状态,1 代表运行中,执行结束后要等上一会才全部running
[root@master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-64cc74d646-jvdjh 1/1 Running 0 6m55s
calico-node-n2hjr 1/1 Running 0 6m55s
calico-node-xmptb 1/1 Running 0 6m55s
coredns-6d8c4cb4d-zrd9j 1/1 Running 0 59m
coredns-6d8c4cb4d-ztd6p 1/1 Running 0 59m
etcd-master 1/1 Running 0 59m
kube-apiserver-master 1/1 Running 0 59m
kube-controller-manager-master 1/1 Running 0 59m
kube-proxy-2jw5c 1/1 Running 0 46m
kube-proxy-468x4 1/1 Running 0 59m
kube-scheduler-master 1/1 Running 0 59m
7)master再次查看node节点状态:Ready
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 27h v1.23.0
node1 Ready <none> 3h23m v1.23.0
node2 Ready <none> 3h22m v1.23.0
三、应用部署
1)创建deploymen
不通过剧本,直接拉取默认镜像来创建
[root@master download]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created # 提示信息:创建成功
格式:kubectl create deployment deployment名称 --image=镜像名称
pod:集群中的最小单元
deployment :pod控制器,可控制多个pod
2)映射端口到外网
[root@master download]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed # 提示信息:执行成功
3)查看具体信息
[root@master download]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 115m
nginx NodePort 10.108.78.87 <none> 80:30014/TCP 21s
4)浏览器访问测试
# master节点测试:http://10.0.0.11:30014
# node节点测试:http://10.0.0.12:30014
# 常用kubectl命令
# 查看node节点
kubectl get nodes
# 删除node节点
kubectl delete nodes node01
# node节点退出master
kubeadm reset
# 创建资源
kubectl create -f xxx.yaml
# 应用资源
kubectl apply -f xxx.yaml
# 删除资源
kubectl delete -f xxx.yaml
# 查看Deployment信息
kubectl get deploy
# 查看Deployment详细信息
kubectl describe deploy Deployment名称
# 查看服务列表
kubectl get service
# 删除指定服务
kubectl delete service 服务名称
# 彻底卸载K8S
sudo yum remove -y kube*
sudo kubeadm reset -f
sudo rm -rvf $HOME/.kube
sudo rm -rvf ~/.kube/
sudo rm -rvf /etc/kubernetes/
sudo rm -rvf /etc/systemd/system/kubelet.service.d
sudo rm -rvf /etc/systemd/system/kubelet.service
sudo rm -rvf /usr/bin/kube*
sudo rm -rvf /etc/cni
sudo rm -rvf /opt/cni
sudo rm -rvf /var/lib/etcd
sudo rm -rvf /var/etcd
# kubectl查看类命令大全
1 # 创建资源 2 kubectl create -f xxx.yaml 3 # 应用资源 4 kubectl apply -f xxx.yaml 5 # 应用资源,该目录下的所有 .yaml, .yml, 或 .json 文件都会被使用 6 kubectl apply -f <directory> 7 # 创建test名称空间 8 kubectl create namespace test 9 10 # 删除资源 11 kubectl delete -f xxx.yaml 12 kubectl delete -f <directory> 13 # 删除指定的pod 14 kubectl delete pod podName 15 # 删除指定名称空间的指定pod 16 kubectl delete pod -n test podName 17 # 删除其他资源 18 kubectl delete svc svcName 19 kubectl delete deploy deployName 20 kubectl delete ns nsName 21 # 强制删除 22 kubectl delete pod podName -n nsName --grace-period=0 --force 23 kubectl delete pod podName -n nsName --grace-period=1 24 kubectl delete pod podName -n nsName --now 25 26 # 编辑资源 27 kubectl edit pod podName
# kubectl进阶命令操作
1 # kubectl exec:进入pod启动的容器 2 kubectl exec -it podName -n nsName /bin/sh #进入容器 3 kubectl exec -it podName -n nsName /bin/bash #进入容器 4 5 # kubectl label:添加label值 6 kubectl label nodes k8s-node01 zone=north #为指定节点添加标签 7 kubectl label nodes k8s-node01 zone- #为指定节点删除标签 8 kubectl label pod podName -n nsName role-name=test #为指定pod添加标签 9 kubectl label pod podName -n nsName role-name=dev --overwrite #修改lable标签值 10 kubectl label pod podName -n nsName role-name- #删除lable标签 11 12 # kubectl滚动升级; 通过 kubectl apply -f myapp-deployment-v1.yaml 启动deploy 13 kubectl apply -f myapp-deployment-v2.yaml #通过配置文件滚动升级 14 kubectl set image deploy/myapp-deployment myapp="registry.cn-beijing.aliyuncs.com/google_registry/myapp:v3" #通过命令滚动升级 15 kubectl rollout undo deploy/myapp-deployment 或者 kubectl rollout undo deploy myapp-deployment #pod回滚到前一个版本 16 kubectl rollout undo deploy/myapp-deployment --to-revision=2 #回滚到指定历史版本 17 18 # kubectl scale:动态伸缩 19 kubectl scale deploy myapp-deployment --replicas=5 # 动态伸缩 20 kubectl scale --replicas=8 -f myapp-deployment-v2.yaml #动态伸缩【根据资源类型和名称伸缩,其他配置「如:镜像版本不同」不生效】
未完待续...