使用RKE搭建docker-k8s集群

发布于:2023-01-11 ⋅ 阅读:(941) ⋅ 点赞:(0)

目录

一:什么是RKE

二:k8s主机master的准备工作

1、修改master主机名(先配置一台,克隆另外两台)

2、配置静态ip地址

3、修改域名解析地址

4、下载一些常用软件并禁用防火墙、selinux、swap分区

5、删除全部docker文件及依赖包、镜像、容器、卷

6、安装docker,有很多安装方式,可以去官网看。不要下最新版,不兼容

7、修改docker配置

8、建一个用户并添加权限。

9、启动ipv4转发

二:克隆两台机器,并修改IP地址和主机名

1、同master主机一样修改IP地址和主机名

2、建立SSH免密通道

三:RKE安装及部署k8s

1、安装RKE

2、授权并创建cluster.yml

3、安装(幂等操作)

4、master主机上安装kubectl交互工具。

四:创建pod并开启nginx服务(可以在root用户)

1、创建两个.yml文件

2、创建pod并查看状态

3、启动service暴露端口

4、浏览器验证

五:补充


一:什么是RKE

        RKE是一款经过CNCF认证的开源Kubernetes发行版,可以在Docker容器内运行。它通过删除大部分主机依赖项,并为部署、升级和回滚提供一个稳定的路径,从而解决了Kubernetes最常见的安装复杂性问题。

二:k8s主机master的准备工作

OS hostname IP
centos7 k8s-master 192.168.149.164
centos7 k8s-node1 192.168.149.165
centos7 k8s-node2 192.168.149.166

1、修改master主机名(先配置一台,克隆另外两台)

vi /etc/hostname或者hostnamectl set-hostname k8s-master
[root@k8s-master ~]# cat /etc/hostname 
k8s-master
[root@k8s-master ~]# 

2、配置静态ip地址

vi /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO="static"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.149.164
PREFIX=24
GATEWAY=192.168.149.2
DNS1=114.114.114.114

改完后service network restart重启网络服务

3、修改域名解析地址

cat >> /etc/hosts << EOF
192.168.149.164 k8s-master
192.168.149.165 k8s-node1
192.168.149.166 k8s-node2
EOF

4、下载一些常用软件并禁用防火墙、selinux、swap分区

yum install -y lrzsz
yum install -y net-tools
yum install -y wget
yum install -y vim-enhanced
yum install -y bash-completion
yum install -y git
yum install -y telnet
yum install -y telnet-server
####全部建议永久关闭,避免重启后服务报错
# 关闭防火墙
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    # 永久

5、删除全部docker文件及依赖包、镜像、容器、卷

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine


rm –rf /var/lib/docker/

6、安装docker,有很多安装方式,可以去官网看。不要下最新版,不兼容

官网提供多种方式安装:Redirecting…

yum install docker -y
[root@k8s-master ~]# docker -v
Docker version 1.13.1, build 7d71120/1.13.1

7、修改docker配置

mkdir /etc/docker
vi /etc/docker/daemon.json
添加:
{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ],
    "dns":[
        "114.114.114.114",
        "8.8.8.8",
        "8.8.4.4"
    ]
}

然后使之生效:systemctl daemon-reload
设置开机自启:systemctl enable docker
启动:systemctl start docker
测试:docker run hello-world

显示 Hello from Docker! 即表示安装成功

8、建一个用户并添加权限。

useradd xxx
passwd xxx
usermod -aG docker xxx

vi /etc/sudoers
找到这一行:"root ALL=(ALL) ALL",
在下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名)

9、启动ipv4转发

/etc/sysctl.conf

net.ipv4.ip_forward = 1              
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

使之生效sudo sysctl -p

二:克隆两台机器,并修改IP地址和主机名

1、同master主机一样修改IP地址和主机名

2、建立SSH免密通道

master主机这边切换到普通用户su - xxx

ssh-keygen  #三次回车   生成秘钥

ssh-copy-id 用户名@机器IP #输入yes和密码   发送公钥,用户名都是xxx

ssh 用户名@机器IP  #测试免密

三:RKE安装及部署k8s

1、安装RKE

下载地址:Release Release v0.2.4 · rancher/rke · GitHub

使用xftp拖下来:

2、授权并创建cluster.yml

改名并赋予可执行权限
[yuan@k8s-master ~]$ ls
cluster.rkestate  cluster.yml  kube_config_cluster.yml  rke
[yuan@k8s-master ~]$ chmod +x rke


同目录下创建cluster.yml文件
[yuan@k8s-master ~]$ cat cluster.yml 
nodes:
  - address: 192.168.149.164
    user: yuan
    role: [controlplane,etcd]
  - address: 192.168.149.165
    user: yuan
    role: [etcd,worker]
  - address: 192.168.149.166
    user: yuan
    role: [etcd,worker]
[yuan@k8s-master ~]$ 

3、安装(幂等操作)

./rke up --config cluster.yml

如果报错Failed to get job complete status for job rke-network-plugin-deploy-job in namespace kube-system,检查ssh免密通道是否建好,重新执行一遍。

完成后当前目录下回生成kube_config_cluster.yml和cluster.rkestate文件

4、master主机上安装kubectl交互工具。

下载v1.15.0,或者官网Install Tools | Kubernetes

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

赋予可执行权限,放入bin目录

chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

拷贝文件kube_config_cluster.yml并重命名

#将集群认证凭据文件添加到系统变量
echo export KUBECONFIG=/home/rke/kube_config_cluster.yml >> ~/.bash_profile
 
source ~/.bash_profile

kubectl get node  #测试

查看集群状态和系统容器
kubectl get nodes -o wide
kubectl get pods -A

四:创建pod并开启nginx服务(可以在root用户)

1、创建两个.yml文件

[root@k8s-master ~]# cat nginx-dep.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
[root@k8s-master ~]#
[root@k8s-master ~]# cat nginx-svc.yml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080
  type: NodePort
[root@k8s-master ~]#

2、创建pod并查看状态

kubectl apply -f nginx-dep.yml

kubectl get deployment  nginx-deployment -o wide

[root@k8s-master ~]# kubectl get deployment  nginx-deployment -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
nginx-deployment   4/4     4            4           2d    nginx        nginx:alpine   app=nginx
[root@k8s-master ~]# 

3、启动service暴露端口

# 启动服务
kubectl apply -f nginx-svc.yml
# 查看
[root@k8s-master ~]# kubectl get svc nginx-service -o wide 
NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE   SELECTOR
nginx-service   NodePort   10.43.222.41   <none>        80:30080/TCP   2d    app=nginx
# 详细
[root@k8s-master ~]# kubectl describe svc nginx-service
Name:                     nginx-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP Families:              <none>
IP:                       10.43.222.41
IPs:                      <none>
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30080/TCP
Endpoints:                10.42.1.15:80,10.42.1.18:80,10.42.2.18:80 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

4、浏览器验证

五:补充

查看节点信息:kubectl get nodes -o wide
查看有哪些pod:kubectl get pods -o wide
查看pod详细信息:kubectl describe pod nginx-deployment-7b45b4c665-78kj6 
查看pod日志:kubectl logs nginx-deployment-7b45b4c665-78kj6
扩缩:kubectl scale deployment/nginx-deployment --replicas=10
回滚:kubectl rollout undo deployment/k8s-nginx-1.18
版本升级:kubectl set image deployment/k8s-nginx-1.18 nginx=nginx:2.10.1


网站公告

今日签到

点亮在社区的每一天
去签到