Kubernetes部署安装(k8s)

主机名IP
master10.0.0.11
node110.0.0.12
node210.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  #动态伸缩【根据资源类型和名称伸缩,其他配置「如:镜像版本不同」不生效】

未完待续...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值