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

相关推荐
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜6 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB7 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220709 天前
如何搭建本地yum源(上)
运维
大树8812 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠12 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质12 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务