k8s 安装部署

一,准备3台机器,安装docker,kubelet、kubeadm、kubectl

firewall-cmd --state

使用下面命令改hostname的值:(改为k8s-master01)另外两台改为相应的名字。

172.188.32.43

hostnamectl set-hostname k8s-master01

172.188.32.44

hostnamectl set-hostname k8s-node01

172.188.32.40

hostnamectl set-hostname k8s-node02

部署k8s

关防火墙

systemctl stop firewalld # 临时

systemctl disable firewalld # 永久

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭

setenforce 0 # 临时关闭

关闭swap

swapoff -a # 临时

sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭

在master节点添加hosts

cat >> /etc/hosts << EOF

172.188.32.43 k8s-master01

172.188.32.44 k8s-node01

172.188.32.40 k8s-node02

EOF

将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

生效

sysctl --system

时间同步

yum install ntpdate -y

ntpdate time.windows.com

1 安装docker &k8s :

yum -y install gcc # 安装gcc

yum -y install gcc-c++ #安装gcc++

安装软件包

yum install -y yum-utils

yum-config-manager \

--add-repo \

https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装指定版本

yum install docker-ce-18.06.1.ce-3.el7 docker-ce-cli-18.06.1.ce-3.el7 containerd.io

启动docker

systemctl enable docker

systemctl start docker

查看版本

docker version

配置k8s软件源

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

安装kubelet、kubeadm、kubectl,同时指定版本 全部节点

yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4

设置开机启动

systemctl enable kubelet

安装kubelet、kubeadm、kubectl,同时指定版本 全部节点

yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4

设置开机启动

systemctl enable kubelet

部署Kubernetes Master(仅master节点 ):

kubeadm init --apiserver-advertise-address=172.188.32.43 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

如果出现kubelet-check The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp ::1:10248: connect: connection refused.的错误,如下图所示,原因是Docker是用yum安装的,docker的cgroup驱动程序默认设置为system。默认情况下Kubernetes cgroup为systemd,我们需要更改Docker cgroup驱动,解决方法如下:

出现错误:

解决方法

vi /etc/docker/daemon.json

修改为下面形式 node节点也要修改

{

"exec-opts": "native.cgroupdriver=systemd"

}

重启docker

systemctl restart docker

重新初始化

kubeadm reset # 先重置

kubeadm init --apiserver-advertise-address=172.188.32.43 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

在node节点运行下面代码,将node加入master:

kubeadm join 172.188.32.43:6443 --token 6ad1uz.zmr0o8dio0kirp7x \

--discovery-token-ca-cert-hash sha256:ae8196e0fec0b3fe3295210904d579076b5ebf12efe295984dba39d62c800857

如果出现上面的错误,说明token过期,重新生成token。或是因为master的防火墙没关。。。

kubeadm reset # 先重置

重新初始化

kubeadm reset # 先重置

kubeadm init --apiserver-advertise-address=172.188.32.43 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

关闭防火墙

root@localhost \~# setenforce 0

root@localhost \~# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

root@localhost \~# systemctl disable firewalld --now

使用kubectl工具 【master节点操作】

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 node查看节点信息:

安装网络插件,否则 node 是 NotReady 状态(master节点跑)

很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果出错

vi /etc/hosts # 编辑hosts

185.199.108.133 raw.githubusercontent.com # 加入

很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 如果上面的插件安装失败,可以选用 Weave,下面的命令二选一就可以了。

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

kubectl apply -f http://static.corecore.cn/weave.v2.8.1.yaml

更多其他网路插件查看下面介绍,自行网上找 yaml 安装 https://blog.csdn.net/ChaITSimpleLove/article/details/117809007

再重新下载。运行kubectl get nodes,查看运行的节点

查看状态 kubectl get pods -n kube-system

安装 k8s dashboard

tips: 在master机器执行

部署

curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml -O

kubectl apply -f recommended.yaml

设置访问端口 `type: ClusterIP` 修改为 `type: NodePort`

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

查看服务端口

kubectl get svc -A |grep kubernetes-dashboard

通过谷歌浏览器无法正常访问,然后换了个火狐浏览器正常访问

创建账号

echo 'apiVersion: v1

kind: ServiceAccount

metadata:

name: admin-user

namespace: kubernetes-dashboard


apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: admin-user

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: ClusterRole

name: cluster-admin

subjects:

  • kind: ServiceAccount

name: admin-user

namespace: kubernetes-dashboard' > user.yaml

kubectl apply -f user.yaml

获取访问令牌

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets0.name}") -o go-template="{{.data.token | base64decode}}"

2 测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

下载nginx 【会联网拉取nginx镜像】

kubectl create deployment nginx --image=nginx

查看状态

kubectl get pod

下面我们就需要将端口暴露出去,让其它外界能够访问

暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort

查看一下对外的端口

kubectl get pod,svc

如下图所示,记下PORT(S)下的31660,在本机浏览器输入任意节点IP:31600。

如图,出现下面页面,即为成功。如果访问不了,把防火墙关闭

http://172.188.32http://172.188.32http://172.188.32.43http://

http://172.178.32.40:32231/

jar包

阿里云接口 (推送到阿里云镜像,不懂的可以私信)

kubectl create deployment tea --image=registry.cn-hangzhou.aliyuncs.com/wmzhyf/work:v1

kubectl expose deployment tea --port=20018 --type=NodePort

kubectl -n logs platform-help-96f5ffc9-q8fpd

kubectl delete pods business

kubectl delete deployment business

kubectl delete svc business

kubectl expose deployment business --port=20028 --type=NodePort

kubectl get pods -o wide

kubectl delete deployment business

kubectl get pod,svc

kubectl create deployment test --image=business

kubectl expose deployment test--port=20019 --type=NodePort

http://172.188.32http://

http://172.188.32.40:++++30992++++/time

查看pod详细信息

kubectl -n describe pod platform-help-96f5ffc9-q8fpd

查看pod日志

kubectl -n logs platform-help-96f5ffc9-q8fpd

kubectl create deployment java-demo --image=lizhenliang/java-demo --dry-run -o yaml

kubectl expose deployment business --port=20018 --type=NodePort

附:kubectl 命令

基础命令

create 通过文件名或标准输入创建资源;

expose 为Deployment,Pod创建Service;

run 在集群中运行一个特定的镜像;

set 在对象上设置特定的功能;

explain 文档参考资料;

get 显示一个或多个资源;

edit 使用系统编辑器编辑一个资源;

delete 通过文件名,标准输入,资源名称或标签选择器来删除资源

部署命令

rollout 管理Deployment,Daemonset资源的发布(例如状态、发布记录、回滚等);

rolling-update 滚动升级,仅限ReplicationController;

scale 对Deployment、ReplicaSet、RC或Job资源扩容或缩容Pod数量;

autoscale 为Deploy,RS,RC配置自动伸缩规则(依赖metrics-server和hpa)

集群管理命令

certificate 修改证书资源;

cluster-info 显示集群信息;

top 查看资源利用率(依赖metrics-server);

cordon 标记节点不可调度;

uncordon 标记节点可调度;

drain 驱逐节点上的应用,准备下线维护;

taint 修改节点taint标记

create

kubectl create deployment NAME --image=image -- COMMAND args... //格式

root@master \~# kubectl create deployment test1 --image busybox

deployment.apps/test1 created //使用busybox镜像创建一个test1的pod

root@master \~# kubectl get pod

NAME READY STATUS RESTARTS AGE

test1-78d64fd9b9-4ihbm 0/1 CrashLoopBackOff 3 114s //可以看到处于退出状态,因为busybox使用的是sh,没有任务就会退出

root@master \~# kubectl create deployment test2 --image busybox -- sleep 60

deployment.apps/test2 created

root@master \~# kubectl get pod

NAME READY STATUS RESTARTS AGE

test2-7c95bf5bcb-wdf2 1/1 Running 0 17s //正在运行

root@master \~# kubectl create deployment web --image nginx --replicas 3 // 创建使用nginx镜像创建三个pod,名字为web

deployment.apps/web created

root@master \~# kubectl get pod

web-96d5df5c8-2kqfx 1/1 Running 0 57s

web-96d5df5c8-ld842 1/1 Running 0 57s

web-96d5df5c8-vtwks 1/1 Running 0 57s

root@master \~# kubectl get pods -o wide //查看pod运行的节点位置

web-96d5df5c8-2kqfx 1/1 Running 0 2m2s 10.244.2.3 node2.example.com <none> <none>

web-96d5df5c8-ld842 1/1 Running 0 2m2s 10.244.1.6 node1.example.com <none> <none>

web-96d5df5c8-vtwks 1/1 Running 0 2m2s 10.244.2.4 node2.example.com <none> <none>

root@master \~# kubectl create deployment web01 --image nginx --port=80 //暴露80端口号

run

// 启动一个 nginx pod

root@master \~# kubectl run nginx --image nginx

pod/nginx created

root@master \~# kubectl get pods -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

nginx 1/1 Running 0 36s 10.244.1.7 node1.example.com <none> <none>

root@master \~# kubectl delete pods nginx //删除nginx的pod

pod "nginx" deleted

root@master \~# kubectl run nginx --images nginx --port 80 // 暴露容器的80端口号

// 在容器中设置标签"app=nginx"和"env=prod"

root@master \~# kubectl run nginx --image nginx --labels "app=nginx,env=prod"

pod/nginx created

root@master \~# kubectl describe pod nginx //描述nginx信息

// 测试运行

root@master \~# kubectl run nginx --image nginx --dry-run server //不会真正运行

W1219 01:41:21.786495 157488 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.

pod/nginx created (dry run)

Delete

root@master \~# kubectl delete deployment test1 // 删除test1,使用deployment类型,因为我们当时创建的时候使用的是deployment类型

deployment.apps "test1" deleted

root@master \~# kubectl get pod

NAME READY STATUS RESTARTS AGE

nginx-6799fc88d8-thr6q 1/1 Running 0 4h2m

test2-7c95bf5bcb-tqgn5 0/1 Terminating 8 32m

web-96d5df5c8-2kqfx 1/1 Running 0 30m

web-96d5df5c8-ld842 1/1 Running 0 30m

web-96d5df5c8-vtwks 1/1 Running 0 30m

root@master \~# kubectl delete deployment test2

deployment.apps "test2" deleted

root@master \~# kubectl get pod

NAME READY STATUS RESTARTS AGE

nginx-6799fc88d8-thr6q 1/1 Running 0 4h2m

web-96d5df5c8-2kqfx 1/1 Running 0 31m

web-96d5df5c8-ld842 1/1 Running 0 31m

web-96d5df5c8-vtwks 1/1 Running 0 31m

root@master \~# kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29h

nginx NodePort 10.99.74.11 <none> 80:31173/TCP 28h

web ClusterIP 10.109.101.12 <none> 8080/TCP 12m

// 删除service类型的pod

root@master \~# kubectl delete svc nginx

'service "nginx" deleted

root@master \~# kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29h

web ClusterIP 10.109.101.12 <none> 8080/TCP 15m

root@master \~# kubectl delete pods --all //删除所有pod

root@master \~# kubectl delete pod foo --force //强制删除pod节点

附:

Docker 制作jar 包对应的镜像

制作jar 镜像

1.准备jar包和Dockerfile文件

Dockerfile文件 命令1

拉取jdk8作为基础镜像

FROM java:8

作者

MAINTAINER wmzhyf <181398981@163.com>

添加jar到镜像并命名为user.jar

ADD iot-business.jar business.jar

镜像启动后暴露的端口

EXPOSE 20018

jar运行命令,参数使用逗号隔开

ENTRYPOINT "java","-jar","business.jar"

Dockerfile文件 命令2

#环境

FROM openjdk:8

#作者信息

MAINTAINER wmzhyf <181398981@163.com>

#将本地文件挂载到容器

EXPOSE 10018 20018

#拷贝

COPY business.jar /business.jar

#执行命令

CMD "sh", "-c", "java -jar /business.jar \> /business.log 2\>\&1"

2.准备镜像

然后使用docker命令打包:

docker build -t business .

user表示镜像名称

最后的.表示Dockerfile在当前目录

打包完成后使用docker images查看镜像

使用docker run命令创建并运行容器:

docker run -d --name user -p 8001:8001 business

docker run -d --name business -p 20018:20018 business

命令解释如下:

|------------|---------------------------|
| 命令 | 功能 |
| docker run | 创建并启动容器 |
| --name | 指定一个容器名称 |
| -d | 后台运行容器,并返回容器ID |
| -p | 指定端口 |
| user | 需要启动的镜像(名称+版本)不指定版本默认最新版本 |
| : | 符号左边为宿主机,右边为容器空间 |

docker logs -f -t business

jar日志启动成功,查看容器:

docker ps

我这里是openjdk8

创建并运行容器(直接基于jdk镜像创建容器):

docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app java:8 /usr/bin/java -jar /app/user.jar

docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app openjdk:8 java -jar /app/user.jar

docker run -d --name business -p 20018:20018 -v /home/matrix/app:/app openjdk:8 java -jar /home/matrix/app/business.jar

相关推荐
KIDULT°1 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
wewowilling4 小时前
认识微服务
java·运维·微服务·springcloud
玖石书4 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
weifont6 小时前
自动化抓取和上架商品:能不动手,就少动手
运维·前端·自动化
拂拉氏6 小时前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Mikko77 小时前
Linux 重启后日志没了?进程被 OOM 杀了去哪看?logrotate 之后日志还往旧文件写?三台真机实测日志与性能排查
linux·运维·centos
光依旧7 小时前
发版就掉请求?Spring Boot优雅停机的四步
运维·spring boot·nginx·高可用·优雅停机·mcp server
yichengerp8 小时前
电子行业常用erp系统有哪些?推荐适合中小电子厂的易呈erp软件,操作简单,易落地
大数据·运维·人工智能·云计算·制造
天国梦8 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
信可维9 小时前
自动化操作多平台账号:登录态、双会话与 User Data 的 3 个坑
运维·自动化