1.安装docker
docker安装
2.配置docker使用systemd作为默认cgroup驱动,使docker与kubenetes的驱动一致,否则会报错
处理错误参考链接
cat << EOF >> /etc/docker/daemon.json
{
“exec-opts”:[“native.cgroupdriver=systemd”]
# “exec-opts”:[“native.cgroupdriver=cgroupfs”]
}
3.启动docker
systemctl start docker
systemctl enable docker
4.设置阿里的kubeadm源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enable=1
EOF
5.安装kubeadm等
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
6.下载minikube的软件包
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.2.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
7.关闭交换分区
swapoff -a
8.启动minikube( minikube delete删除minikube结点)
minikube start --vm-driver=“none”
kubectl create deployment nginx-deploy --image=nginx -r 3
deployment名称为 nginx-deploy
使用的镜像为:nginx
-r 启动容器的副本数
#创建部署
kubectl create deployment nginx-deploy
# 获取pod或结点信息
kubectl get pod/node
# 获取详细信息
kubectl describle ...
#获取日志信息
kubectl logs
# 查看集群信息
kubectl cluster-info
#进入容器内部
kubectl exec -it [pod_name] -- [command]
# 删除部署
kubectl delete deployment nginx-deploy
常见的三种暴露模式
ClusterIp
NodePort
LoadBalancer
创建deployment
kubectl create deployment my-nginx --image=nginx --replicas=2
[root@minikube]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
my-nginx 2/2 2 2 72s
创建服务并暴露端口
kubectl expose deployment my-nginx --port=8080 --target-port=80 --type="NodePort"
[root@minikube]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 5h47m
my-nginx NodePort 10.106.249.64 8080:32463/TCP 9s
查看服务详细信息
kubectl describe service my-nginx
Name: my-nginx
Namespace: default
Labels: app=my-nginx
Annotations:
Selector: app=my-nginx
Type: NodePort
IP Families:
IP: 10.106.249.64
IPs:
Port: 8080/TCP
TargetPort: 80/TCP
NodePort: 32463/TCP
Endpoints: 172.17.0.4:80,172.17.0.5:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
问题解决
iptables -P FORWARD ACCEPT
疑点:为什么网页数据会经过forward数据转发链,猜测可能与k8s的kube-proxy代理有关
kube-proxy的三种模式:
iptables模式(1.2版本后)
ipvs模式(1.8版本后)
userspace模式
动态扩缩容:
kubectl scale deployment my-nginx --replicas=3
#查看pod的详细信息
kubectl get pod -o wide
滚动升级
# 创建低版本nginx容器pod
kubectl create deployment my-nginx-1.18 --image=nginx:1.18.0 -r 2
# 滚动升级
kubectl set image deployment my-nginx-1.18 nginx=nginx:1.19.7
# 查看镜像版本
kubectl describe pod my-nginx-1.18
# 查看滚动升级是否成功
kubectl rollout status deployment my-nginx-1.18
---------------------------------------------
>deployment "my-nginx-1.18" successfully rolled out
------------------------------------------------
#升级不存在的版本会出错
# 回滚,撤销版本升级
kubectl rollout undo deployment my-nginx-1.18
#查看版本信息
kubectl describe pod my-nginx-1.18
k8s中的namespace
为了防止错误的操作同名服务,可以将不同服务的pod放置到不同的命名空间。
# 查看pod所属命名空间
kubectl get pod -A
# 查看所有命名空间
kubectl get namespace
configmap
相当于一个容器文件,共享数据到pod中的容器内,公共的数据中心
secret
存放加密信息(密码,密钥,auth认证信息)
pv与pvc:
pv:实际划分的存储空间
pvc:相当于取货单,去pv上申请空间分配
资源部署通过yaml文件
kubectl apply -f ...yaml
搭建k8s集群完整篇