Kubernetes技术极速入门(二)----初次交锋,请手下留情

使用Kubeadm部署kubernetes集群

1.硬件要求
主机名称CPUMEM角色系统处理器数
master122GmaterCentOS7.52
worker122GworkerCentOS7.52
worker222GworkerCentOS7.52
1.5.镜像地址

下载传送门

1.8.观看菜鸡是咋弄的!

传送阵

菜鸡感受:我太难了!
大家在初始化kubernetes之后,一定要记录用记事本等工具记录那些信息

2.主机准备

每天主机都采用最小化安装,100G磁盘,分区为/boot,/,ip地址范围为192.168.200.100~102。

3.修改主机名
hostnamectl set-hostname master1
hostnamectl set-hostname worker1
hostnamectl set-hostname worker2
4.修改网卡名(也可以不修改)

在开机界面,按下Tab,在quiet前添加配置,修改网卡名。

net.ifnames=0 biosdevname=0

上面配置的作用是更改网卡名为eth0开头,随后增加网卡为eth1,eth2递增

5.配置主机ip地址

我的网卡是ens33
#master1

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

修改成如下内容:(实际就2与倒数4行修改过)

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="fdf61b61-318b-4634-b305-15fcbb72d968"
DEVICE="eno16777736"
ONBOOT="yes"
IPADDR=192.168.200.100
PREFIX="24"
GATEWAY="192.168.200.2"
DNS1="119.29.29.29"

重启网络

service network restart

#worker1

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

修改成如下内容:(实际就2与倒数4行修改过)

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="ens33"
UUID="fdf61b61-318b-4634-b305-15fcbb72d968"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.200.101
PREFIX="24"
GATEWAY="192.168.200.2"
DNS1="119.29.29.29"

重启网络

service network restart

#worker2

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

修改成如下内容:(实际就2与倒数4行修改过)

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="ens33"
UUID="fdf61b61-318b-4634-b305-15fcbb72d968"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.200.102
PREFIX="24"
GATEWAY="192.168.200.2"
DNS1="119.29.29.29"

重启网络

service network restart
6.配置域名解析(每台主机都要执行)
vi /etc/hosts

添加如下内容

192.168.200.100 master1
192.168.200.101 worker1
192.168.200.102 worker2
7.测试主机间的联通性

#master1

ping -c 4 worker2
ping -c 4 worker1

大家也可以测试worker1,worker2的联通性

8.关闭防火墙,selinux(每台主机都要执行)

1.停止防火墙

systemctl stop firewalld.service

2.配置防火墙开机禁用

systemctl disable firewalld.service

3.关闭selinux

sed -i  "s/^SELINUX=enforcing/SELINUX=disabled/g"  /etc/selinux/config
9.时间同步
方法一

配置NTP时间同步服务器,并启动时间同步
#master节点
1.下载ntp

yum -y install ntp

2.修改配置文件

vi /etc/ntp.conf

删除原有的server 0/1/2/3/4,并添加如下内容

server 127.127.1.0
fudge 127.127.1.0 stratum 10

3.开启ntp服务

systemctl restart ntpd 

4.设置ntp服务的开机自启

systemctl enable ntpd 

#worker节点(两台都要操作):
1.下载ntp客户端服务

yum -y  install ntpdate

2.同步controller时间

 ntpdate master1
方法二

安装ntpdate,使用阿里源时间同步(每台主机都需要执行)

yum -y  install ntpdate
crontab -e

添加如下内容

0 */1 * * * ntpdate time1.aliyun.com

保存,退出
如果没同步成功
可使用如下命令

ntpdate time1.aliyun.com

查看时间

date
10.关闭swap分区

如果在之前分区时,选择的自动分区,则需要如下操作,都需要执行

vi /etc/fstab

将swap字段注释掉,保存退出
重启

reboot

查看分区

free -m

如果分区中swap分区容量变成0,则说明关闭成功。

11.配置主机网桥过滤(每台主机都要执行)

1.添加网桥过滤及地址转发

cat << EOF > /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF

2.从内核中加载br_netfilter模块(此模块需要centos7.5以上吧!)

modprobe br_netfilter

3.查看是否加载

lsmod | grep br_netfilter

4.加载网桥过滤配置文件

sysctl -p /etc/sysctl.d/kubernetes.conf
12.开启ipvs(每台主机都要执行)

1.安装ipset和ipvsadm

yum -y install ipset ipvsadm

2.添加需要加载的模块

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

3.授权,运行,检查是否加载

chmod 755 /etc/sysconfig/modules/ipvs.modules && sh /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
13.在master节点和worker节点安装指定版本的docker-ce(每台主机都要执行)

1.获取yum源(二选其一)

yum install -y wget

清华源

wget --no-check-certificate -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

阿里源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

2.查看yum源是否获取成功

ls /etc/yum.repos.d/

能看到docker-ce.repo就可以
3.查看docker-ce版本

yum list docker-ce.x86_64 --showduplicates | sort -r

4.安装指定版的docker-ce

yum -y install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7

5.检验docker安装是否成功

docker version

6.配置docker的开机自启

systemctl enable docker

7.开启docker服务

systemctl start docker

8.再次进行验证

docker version
90.修改配置文件1(其他版本可能需要,此实验版本不需要修改)

编写配置文件

vi /usr/lib/systrmd/system/docker.service

在service字段中ExecStart=/usr/bin/dockerd后面-H后面的内容全部删掉(包含-H)

14.修改配置文件2(每台主机都要执行)

编写配置文件

vi /etc/docker/daemon.json

添加如下内容

{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://cyowm7vy.mirror.aliyuncs.com"]
}

重启docker

systemctl restart docker
systemctl status docker
15.软件安装–yum源

#master1
默认YUM源为谷歌,可以使用阿里云YUM
1.安装yun源(阿里云)

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

2.检查yum是否可用,并进行验证

yum list | grep kubeadm

3.将yum源传输给worker主机

scp /etc/yum.repos.d/kubernetes.repo worker1:/etc/yum.repos.d/
scp /etc/yum.repos.d/kubernetes.repo worker2:/etc/yum.repos.d/

4.在worker主机进行验证

yum list | grep kubeadm
16.软件安装–kubeadm,kubelet,kubectl(每台主机都要执行)
yum install -y --setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0
17.kubelet的相关配置(每台主机都要执行)

修改配置文件

vi /etc/sysconfig/kubelet

dd删除原来的内容,再添加如下内容

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置开机自启

systemctl enable kubelet

不要启动它,它的配置文件在后面初始化后才有。

18.镜像准备(只在master节点执行)

1.显示所需要的镜像

kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.17.17
k8s.gcr.io/kube-controller-manager:v1.17.17
k8s.gcr.io/kube-scheduler:v1.17.17
k8s.gcr.io/kube-proxy:v1.17.17
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

编写镜像拉取的脚本

vi k8s.sh
images=(
    kube-apiserver:v1.17.17
    kube-controller-manager:v1.17.17
    kube-scheduler:v1.17.17
    kube-proxy:v1.17.17
    pause:3.1
    etcd:3.4.3-0
    coredns:1.6.5
)
  
for imageName in ${images[@]} ; do
	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 		k8s.gcr.io/$imageName
	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

运行脚本

sh k8s.sh

查看拉取的镜像

docker images
19.kubernetes集群初始化(master节点执行)

1.master节点做集群初始化

kubeadm init \
--apiserver-advertise-address=192.168.200.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.2 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
相关解释:
–apiserver-advertise-address #集群通告地址,填写Master的物理网卡地址
–kubernetes-version #K8s版本,与上面安装的一致
–pod-network-cidr #指定Pod IP的网段,flannel默认使用10.244.0.0/16
--service-cidr string  # service所使用的网络,default "10.96.0.0/12"
注意:执行完初始化命令后,控制台上会有显示两条kubeadm join命令,
这两条命令分别用于添加master节点和添加node节点上执行,需要先保存这两条命令。
如果遇到什么文件存在,可尝试重置kubeadm  
kubeadm reset

2.复制初始化的一些信息,保存到桌面
从[init] Using Kubernetes version: v1.17.2到最后

3.第一步

mkdir .kube
cp -i /etc/kubernetes/admin.conf  .kube/config
ll .kube/config

4.第二步
安装网络插件,只在master节点操作即可
1.获取yml文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

于外网不好访问,如果出现无法访问的情况,可以直接用下面的 记得文件名是kube-flannel.yml
位置:/root/kube-flannel.yml
内容:https://github.com/flannel-io/flannel/tree/master/Documentation/kube-flannel.yml

2.修改kube-flannel.yml
在大约190左右,在kube-subnet-mgr下新增一个
指定机器的网卡名(写网卡的时候,记得确认一下自己机器的网卡名是什么。)

vi kube-flannel.yml

我的网卡是ens33,就在kube-subnet-mgr下面添加如下内容

- --iface=ens33

3.拉取flannel网络镜像(三台主机 )

docker pull quay.io/coreos/flannel:v0.14.0 

查看仓库是否拉去下来

docker images

4.安装插件

kubectl create -f kube-flannel.yml

5.查看节点详细状态

kubectl get nodes -owide

节点已经为Ready状态,表示pod的网络已经创建成功。

若是集群状态一直是 notready,用下面语句查看原因,

 journalctl -f -u kubelet.service 
若原因是: cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d 

创建目录给flannel做配置文件

mkdir -p /etc/cni/net.d      

编写配置文件

vi /etc/cni/net.d/10-flannel.conf 
{
 "name":"cbr0",
 "cniVersion":"0.3.1",
 "type":"flannel",
 "deledate":{
    "hairpinMode":true,
    "isDefaultGateway":true
  }
}

5.第三步–添加worker节点(worker节点执行)
直接复制之前提示要做的token

kubeadm join 192.168.200.100:6443 --token xn5s4e.2hl6wg5gf4ahpmwo \
 --discovery-token-ca-cert-hash sha256:fcc08d7b8251d55d655ad406c7de17093829646667aa9340cfde1b252c392100 

6.在master节点查看节点状态

kubectl get nodes

可以发现集群的状态已经是Ready
如果,长时间没起来,可以重启一下网络插件

kubectl apply -f kube-flannel.yml
20.验证Kubernetes集群可用性

1.查看节点状态

kubectl get nodes

2.查看集群健康状态

kubectl get cs

kubectl cluster-info

3.检查pod的状态(确保所有的都是Running

kubectl get pods --namespace kube-system
21.测试Kubernetes----部署nginx应用

1.安装nginx服务

kubectl run test-nginx --image=nginx:alpine

2.验证安装

kubectl get pods -o wide --watch
1.status,可以直观的看到目前容器的情况;
2.ip,为flannel网络的ip,为内部局域网;
3.node,所属节点
4.访问nginx,可以直接访问集群中的局域网IP,也就是flannel创建的IP

3.验证应用使用情况

curl 10.244.1.2

这里的10.244.1.2是我在上面得到的局域网ip

4.验证节点运行情况
查看nginx容器是不是运行在上面指定的某个节点
worker节点都执行以下命令,

docker ps  | grep test

可以明确的看见,在指定节点上的容器里面多了两个test相关的容器

22.使用deployment部署nginx应用

这里先创建一个deployment资源,该资源是k8s部署应用的重点。
创建deployment资源后,deployment指示k8s如何创建应用实例,k8s-master将应用程序,调度到具体的node上,也就是生成pod以及内部的容器实例。
应用创建后,deployment会持续监控这些pod,如果node节点出现故障,deployment控制器会自动找到更优的node,重新创建新的实例,这就提供了自我修复能力,解决服务器故障问题。

创建k8s资源有两种方式
yaml配置文件,生产环境使用
命令行,调试使用
1.创建yaml,应用yaml

vi test2-nginx.yaml

添加如下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test2-nginx
  labels:
    app: nginx
spec:
  #创建2个nginx容器
  replicas: 2
  selector:
    matchLabels:
        app: nginx
  template:
    metadata:
        labels:
          app: nginx
    spec:
      containers:
      - name: nginx
        image:  nginx:alpine
        ports:
        - containerPort: 80

2.开始创建

kubectl apply -f test2-nginx.yaml

3.验证deployment资源是否创建成功

kubectl get pods -o wide

4.验证应用使用情况

curl 10.244.1.3
curl 10.244.2.2

这里的10.244.1.3,10.244.2.2是我在上面得到的局域网ip

23.service

service是k8s中的一个重要概念,主要是提供负载均衡和服务自动发现。
问题又回到一开始了,使用deployment创建的nginx已经运行成功了。那么外部应该如何访问到这个nginx?
pod IP仅仅是集群内可见的虚拟IP,外部无法访问。pod IP会随着pod 的销毁而消失,当ReplicaSet对pod进行动态伸缩时,pod IP可能随时随地的都会改变,这样就会增加访问这个服务的难度.
因此,通过pod的IP去访问服务,基本上是不现实的,解决方案就是使用新的资源,(service)负载均衡资源
1.指定了deployment为test2-nginx ,端口为80,标签为LoadBalancer

kubectl expose deployment test2-nginx --port=80 --type=LoadBalancer

2.查看所有的deployment

kubectl get deployment

3.查看所有的service的详细信息

kubectl get services -o wide

这样我们就可以直接访问这个端口,就能够访问到这个pod内的应用。
4.浏览器输入如下内容

192.168.200.100:端口号
24.配置kubectl命令补全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
25.部署kubernetes 仪表盘–dashboard

kubernetes 仪表盘是kubernetes集群的通用、基于web的UI。它允许用户管理集群中运行应用程序并对其进行故障排除,以及管理集群本事。
1.下载recommended.yaml,实力允许的话,可以自己编写。

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

2.修改recommended.yaml文件

vi recommended.yaml

添加一下node的类型与端口

 39 spec:
 40   type: NodePort
 41   ports:
 42     - port: 443
 43       nodePort: 30001
 44       targetPort: 8443
 45   selector:
 46     k8s-app: kubernetes-dashboard

3.开始创建recommended

kubectl apply -f recommended.yaml

4.查看所属node以及端口

kubectl -n kubernetes-dashboard get pod,svc -o wide

5.浏览器访问

192.168.200.101:30001

6.创建并修改create-admin.yaml文件

vi create-admin.yaml

添加内容如下

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

7.开始创建

kubectl apply -f create-admin.yaml

获取用户token

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

8.在之前的界面把获取的token值输入进去

9.删除dashboard

kubectl delete -f create-admin.yaml
kubectl delete -f recommended.yaml

10.启动dashboard

kubectl apply -f recommended.yaml	    
kubectl apply -f create-admin.yaml

其他博客:
Kubernetes技术极速入门(一)---- 初次见面,请多多关照
Kubernetes技术极速入门(三)---- 我有神器,能赢不
Kubernetes技术极速入门(四)---- 太强了,干不过
Kubernetes技术极速入门(五)----再来,我必定胜你
Kubernetes技术极速入门(六)---- 我搬救兵,等我回来
Kubernetes技术极速入门(七)---- 我又带了把神器
Kubernetes技术极速入门(八)---- 挥挥手,不带走一片云彩
感谢大家,点赞,收藏,关注,评论!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cat God 007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值