K8s

Linux 2019-08-21 16:48

在集群所有机器上执行

需要更新hostname

vi /etc/hostname

更改为aliyun的源,特殊的国内网络环境

vi /etc/apt/sources.list  #添加下面的内容
# 系统安装源
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
# kubeadm及kubernetes组件安装源
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

更新源并安装kubeadm, kubectl, kubelet软件包

apt-get update -y && apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated

安装docker 

apt-get install docker.io -y

另外需要永久关闭swap

vi /etc/fstab 
#注释掉swap的两行即可

可以使用free命令确认swap关闭

free -m

 


下面的操作在Master上操作

接下来是初始化,先查看需要用到的image

kubeadm config images list

输出如下

k8s.gcr.io/kube-apiserver:v1.15.3
k8s.gcr.io/kube-controller-manager:v1.15.3
k8s.gcr.io/kube-scheduler:v1.15.3
k8s.gcr.io/kube-proxy:v1.15.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

做初始化

kubeadm init --kubernetes-version=v1.15.3 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.28.3.180

这里因为国内网络特殊的环境,又GG了,需要想办法处理。

 

网上找到一个办法,从国内下载对应的docker images

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1

然后打标签成k8s要用的images

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.3  k8s.gcr.io/kube-apiserver:v1.15.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.3 k8s.gcr.io/kube-controller-manager:v1.15.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.3 k8s.gcr.io/kube-scheduler:v1.15.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.3 k8s.gcr.io/kube-proxy:v1.15.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

这可真是个体力活,还得仔细不能出错。感慨一下国内开发简直是地狱模式 

 

然后再执行初始化的命令,基本就OK啦。

接下来需要安装一个canal的网络插件

依次执行

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml

查看执行安装的状态

kubectl get pod -n kube-system -o wide

查看错误的时候的提示

kubectl describe pod podname --namespace=kube-system



在Node机器上执行

kubeadm join 172.28.3.180:6443 --token ktd5ta.5878xh7vr52k6vnz

如果过期的话,需要再去Master上获取新的token

kubeadm token create

国内的话没有这么简单,需要下载两个镜像

#阿里云上下载
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.3
#打tag做镜像修改
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.3 k8s.gcr.io/kube-proxy:v1.15.3



Node常用命令

#验证集群状态(Master节点执行)
kubectl get nodes

#查看pod状态,系统级
kubectl get pod -n kube-system -o wide



pod常用命令

#查看pod
kubectl get pods -o wide

#创建pod
kubectl create -f oceanpod.yaml

#发现Noready状态可以用下面的命令来查看
kubectl get pod --all-namespaces

#具体的原因可以通过下面命令查看
kubectl describe pod  kube-flannel-ds-amd64-dt6j8 --namespace=kube-system

#删除pod
kubectl delete pod podname

oceanpod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: ocean-pod
  labels:
    app: ocean-pod
spec:
  containers:
  - name: ocean-pod
    image: oceanheyang/oceantestapp
    ports:
    - containerPort: 80
      hostPort: 8081  #端口直接暴露出来可以访问

    

 

service常用命令

#创建一个service
kubectl create service nodeport nginx --tcp 80:80

#查看service
kubectl get svc
kubectl get services

#删除service
kubectl delete services/nginx

oceanservices.yaml

apiVersion: v1
kind: Service
metadata:
  name: ocean-service 
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80 #转发到port的端口
    nodePort: 30000 #暴露到物理机的端口
  selector:
    app: ocean-pod   #执行的pod名字


deployment常用命令

#创建一个deployment
kubectl create -f oceandeployment.yaml
kubectl create deployment nginx --image=nginx

#查看deployment
kubectl get deployments

#删除deployment
kubectl delete deployments/ocean-deployment
kubectl delete deployments/nginx

#更新
kubectl replace -f oceandeployment.yaml

oceandeployment.yaml

apiVersion: apps/v1
kind: Deployment 
metadata: 
  name: ocean-deployment 
spec: 
  replicas: 10 
  selector:
    matchLabels:
      app: ocean-pod
  template: 
    metadata: 
      labels: 
        app: ocean-pod 
    spec: 
      containers: 
        - name: ocean-pod 
          image: oceanheyang/k8sweb:1.0
          ports: 
            - containerPort: 80

 




Leave a Reply