k8s三:k8s安装与kubectl指令

2.1 k8s的安装与配置
2.1.1 准备工作
以centOs为例
查看Linux系统版本的命令
1、cat /etc/issue,此命令也适用于所有的Linux发行版。
  [root@S-CentOS home]# cat /etc/issue
  CentOS release 6.5 (Final)
  Kernel \r on an \m

2、cat /etc/redhat-release,这种方法只适合Redhat系的Linux:
  [root@S-CentOS home]# cat /etc/redhat-release
  CentOS release 6.5 (Final)
参考:https://www.cnblogs.com/klb561/p/9157569.html

查看防火墙状态
systemctl status firewalld
systemctl stop firewalld
参考:https://blog.csdn.net/wade3015/article/details/90725871

主机上禁用SELinux,让容器可以读取文件系统
cat /etc/sysconfig/selinux
setenforce 0


2.1.2 使用kubeadm工具快速安装k8s集群
新建分支配置文件:
vi /etc/yum.repos.d/kubernetes.repo
内容如下:
[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

cat /etc/yum.repos.d/kubernetes.repo

安装kubelet\kubeadm\kubectl
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
说明:上面的操作需要在所有机器上处理

部署k8s master
说明:该操作仅需要在master节点执行,这里的apiserve需要修改成自己的master地址
kubeadm init \
--apiserver-advertise-address=192.168.73.138 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

根据输出提示操作:
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
默认token的有效期为24小时,当过期之后,该token就不可用了,

如果后续有nodes节点加入,解决方法如下:
重新生成新的token
kubeadm token create
[root@k8s-master ~]# kubeadm token create
0w3a92.ijgba9ia0e3scicg
[root@k8s-master ~]# kubeadm token list
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
0w3a92.ijgba9ia0e3scicg   23h       2019-09-08T22:02:40+08:00   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
t0ehj8.k4ef3gq0icr3etl0   22h       2019-09-08T20:58:34+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
[root@k8s-master ~]#

获取ca证书sha256编码hash值
[root@k8s-master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
ce07a7f5b259961884c55e3ff8784b1eda6f8b5931e6fa2ab0b30b6a4234c09a
节点加入集群
[root@k8s-node01 ~]# kubeadm join --token aa78f6.8b4cafc8ed26c34f --discovery-token-ca-cert-hash sha256:0fd95a9bc67a7bf0ef42da968a0d55d92e52898ec37c971bd77ee501d845b538 192.168.73.138:6443 --skip-preflight-chec


加入k8s node
在两个 Node 节点执行
使用kubeadm join 注册Node节点到Matser
kubeadm join 的内容,在上面kubeadm init 已经生成好了
[root@k8s-node01 ~]# kubeadm join 192.168.4.34:6443 --token 2nm5l9.jtp4zwnvce4yt4oj \
    --discovery-token-ca-cert-hash sha256:12f628a21e8d4a7262f57d4f21bc85f8802bb717dd6f513bf9d33f254fea3e89 


安装网络插件
只需要在Master 节点执行

[root@k8s-master ~]# wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
修改镜像地址:(有可能默认不能拉取,确保能够访问到quay.io这个registery,否则修改如下内容)
[root@k8s-master ~]# vim kube-flannel.yml
image: lizhenliang/flannel:v0.11.0-amd64

[root@k8s-master ~]# cat -n  kube-flannel.yml|grep lizhenliang/flannel:v0.11.0-amd64
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml
[root@k8s-master ~]# ps -ef|grep flannel

查看集群的node状态,安装完网络工具之后,只有显示如下状态,所有节点全部都Ready好了之后才能继续后面的操作

测试Kubernetes集群
在Kubernetes集群中创建一个pod,然后暴露端口,验证是否正常访问:
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx
[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
[root@k8s-master ~]# kubectl get pods,svc
访问地址:http://NodeIP:Port ,此例就是:http://192.168.73.138:32039 

部署 Dashboard
[root@k8s-master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

[root@k8s-master ~]# vim kubernetes-dashboard.yaml
修改内容:
109     spec:
110       containers:
111       - name: kubernetes-dashboard
112         image: lizhenliang/kubernetes-dashboard-amd64:v1.10.1   # 修改此行

......

157 spec:
158   type: NodePort     # 增加此行
159   ports:
160     - port: 443
161       targetPort: 8443
162       nodePort: 30001   # 增加此行
163   selector:
164     k8s-app: kubernetes-dashboard

[root@k8s-master ~]# kubectl apply -f kubernetes-dashboard.yaml

创建service account并绑定默认cluster-admin管理员集群角色:
[root@k8s-master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
serviceaccount/dashboard-admin created
[root@k8s-master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin
--serviceaccount=kube-system:dashboard-admin
[root@k8s-master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

参考:https://www.cnblogs.com/double-dong/p/11483670.html


2.1.4 k8s集群的安全设置
如果仅仅在内网中使用,则k8s的各个组件与master之间可以通过apiserver的非安全端口http://apiserver:8080进行访问。如果apiserver需要对外提供服务,则需要启用https安全机制。有如下两种方式:
1)基于CA签名的双向数字证书认证方式
2)基于http base或token的认证方式

2.1.5 k8s集群的网络配置
需要实现跨主机荣期间的网络互通,k8s优先使用CNI网络插件打通跨主机的容器网络。

2.1.6 内网中k8s相关配置
因为docker需要获取internet中的镜像等资源,而部分企业由于安全问题会无法访问Internet,所以可能需要创建私有的docker registry,并修改k8s的相关配置。

2.1.7 k8s的版本升级
1)获取最新的k8s二进制文件
2)挨个隔离Node,等待去廍容器工作完成后,更细kubelet和kube-proxy服务文件,然后重启两个服务
3) 更新master的kube-apiserver、kube-controller-manager、kube-scheduler服务文件并重启


2.2 kubectl命令行工具用法详解
2.2.1 概述
kubectl [command] [TYPE] [NAME] [flags]
command:子命令,操作k8s资源的命令,如create、delete、get、describe、apply等
TYPE:资源类型,区分大小写,如pod、clusters、deployments、nodes、services等,
NAME:资源对象的名称,区分大小写。如果不指定名称,则默认返回全部
2.2.2 子命令详解
2.2.3 参数列表
2.2.4 输出格式
2.2.5 操作实例
资源创建
kubectl create -f my-service.yaml -f my-rc.yaml #一次性创建service和rc
kubectl create -f <directory> #路径下所有的yaml yml json进行文件的创建

资源查看
kubectl get pods #查看所有pod列表
kubectl get service,rc

资源描述(详情)
kubectl describe nodes <node-name> #获取某规则资源的详情
kubectl describe pods/<pod-name> 
kubectl describe pods <rc-name>

删除资源
kubectl delete -f  pod.yml #基于yaml的定义删除pod
kubectl delete pods,services -l name=<label-name> #基于标签名称删除pod和service
kubectl delete pods -all #删除所有pod

执行容器命令
kubectl exec <pod-name> date #在某个pod中执行命令,默认第一个容器
kubectl exec <pod-name> -c <contianer-name> date #在指定pod的指定容器中执行
kubectl exec <pod-name> -c <contianer-name>  /bin/bash

获取容器日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> -c <container-name>


kubectl的基本指令:
kubectl create -f 我的配置文件
基于yaml文件创建对象

kubectl get pods -l app=nginx
从 Kubernetes 里面获取(GET)指定的 API 对象。可以看到,在这里我还加上了一个 -l 参数,即获取所有匹配 app: nginx 标签的 Pod。

kubectl describe pod nginx-deployment-67594d6bf6-9gdvr
kubectl describe 命令,查看一个 API 对象的细节

kubectl get deployments

kubectl describe  deployment nginx-deployment

#推荐的yaml文件执行方式
kubectl apply -f nginx-deployment.yaml

进入Pod当中
$ kubectl exec -it nginx-deployment-5c678cfb6d-lg9lw -- /bin/bash
# ls /usr/share/nginx/html

删除这个 Nginx Deployment
$ kubectl delete -f nginx-deployment.yaml

对nginx服务升级
1 修改yaml

...    
    spec:
      containers:
      - name: nginx
        image: nginx:1.8 #这里被从1.7.9修改为1.8
        ports:
      - containerPort: 80
更新在 Kubernetes 里也生效:
$ kubectl replace -f nginx-deployment.yaml

我推荐你使用 kubectl apply 命令,来统一进行 Kubernetes 对象的创建和更新操作,具体做法如下所示:
$ kubectl apply -f nginx-deployment.yaml
# 修改nginx-deployment.yaml的内容
$ kubectl apply -f nginx-deployment.yaml
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值